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. 

我尝试了另一种形式的函数,它接受字符串而不是整数,但它会引发相同的错误。我已经验证了Eval("DocumentID")单独放置时可以正常工作。有任何想法吗?

4

2 回答 2

5

eval 返回一个object. 您要么需要将其转换为int,要么将函数更改为接受object,然后将其转换objectint.

<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 的精彩解释和示例。

第二种方法 - 接受对象并在您的自定义函数中进行转换 - 可能会更好地保持转换代码更清洁。结果是平等的。

Just to add a little bit - you can use Kentico's ValidationHelper for conversions, for example:

transformation:

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

code:

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