2012-05-23 3 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. 

Я пробовал альтернативный вид функции который принимает строки, а не int, но он вызывает ту же ошибку. Я проверил, что Eval("DocumentID") работает правильно, когда сам по себе. Есть идеи?

ответ

5

Eval возвращает object. Вам необходимо либо преобразовать его в int, либо изменить функцию, чтобы принять object, и конвертировать ее в object в int.

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

ИЛИ

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

    etc... 
} 
2

Благодаря Doozer за хорошее объяснение и пример.

Второй подход - принять объект и сделать преобразование внутри вашей пользовательской функции - может быть лучше сохранить код преобразования более чистым. Результат равен.

Просто добавить немного - вы можете использовать Кентико в ValidationHelper для преобразования, например:

трансформация:

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

код:

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