自定义转换函数抛出错误。

时间:2012-05-23 13:33:30

标签: kentico

这是我的转换函数调用:

<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")单独放置时可以正常工作。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

Eval返回object。您需要将其转换为int,或将功能更改为接受object,并将object转换为int

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

OR

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

     etc...
}

答案 1 :(得分:2)

感谢Doozer提供了很好的解释和示例。

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

只是添加一点 - 您可以使用Kentico的 ValidationHelper 进行转换,例如:

变换:

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

代码:

public static string getDocumentCategory(object docID)
{
   int documentID = ValidationHelper.GetInteger(docID, 0); //0 is the default value
   ...