2012-05-23 24 views
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")在单独放置时正常工作。有任何想法吗?

回答

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... 
} 
2

感谢道崎为漂亮的解释和例子。

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

我想补充一点 - 你可以使用Kentico的ValidationHelper的转换,例如:

转型:

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

代码:

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