0

これは私の変換関数呼び出しです:

<p><%# MyFunctions.getDocumentCategory(Eval("DocumentID"))%></p>

これは機能です:

public static string getDocumentCategory(int documentID)
{

    string category;

    StringBuilder sb = new StringBuilder();
    // Get document categories 
    var ds = CategoryInfoProvider.GetDocumentCategories(documentID, "CategoryEnabled = 1", null);
    // Check whether exists at least one category
    if (!DataHelper.DataSourceIsEmpty(ds))
    {

        // Loop thru all categories
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            sb.Append(Convert.ToString(dr["CategoryDisplayName"]) + ",");
        }
    }
    string content = sb.ToString();

    category = content.Split(',')[0];

    return category;
}
}

これはエラーです:

MyFunctions.getDocumentCategory(int) has some invalid arguments. 

int ではなく文字列を受け入れる関数の代替形式を試しましたが、同じエラーがスローされます。Eval("DocumentID")単体で設置しても正常に動作することを確認しております。何か案は?

4

2 に答える 2

5

Eval は を返しますobject。に変換するか、intを受け入れるように関数を変更して、それを に変換する必要があります。objectobjectint

<p><%# MyFunctions.getDocumentCategory( Convert.ToInt32( Eval("DocumentID") ) )%></p>

また

public static string getDocumentCategory(object document)
{
     int documentID = Convert.ToInt32( document );

     etc...
}
于 2012-05-23T13:49:18.527 に答える
2

素晴らしい説明と例を提供してくれた Doozer に感謝します。

2 番目のアプローチ (オブジェクトを受け入れてカスタム関数内で変換を行う) は、変換コードを簡潔に保つために優れている場合があります。結果は等しい。

少し追加すると、Kentico のValidationHelperを変換に使用できます。次に例を示します。

変身:

<%# MyFunctions.getDocumentCategory(Eval("DocumentID"))%>

コード:

public static string getDocumentCategory(object docID)
{
   int documentID = ValidationHelper.GetInteger(docID, 0); //0 is the default value
   ...
于 2012-05-23T14:50:06.270 に答える