这是我的转换函数调用:
<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")
单独放置时可以正常工作。有什么想法吗?
答案 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
...