2008-11-13 48 views
9

我使用一个中继器控制,我想传递一个参数为这样的:你如何传递一个Container.DataItem作为参数?

<%# SomeFunction(DataBinder.Eval(Container.DataItem, "Id")) %> 

它基本上呼吁:

public string SomeFunction(long id) { 

    return "Hello";   

} 

我不能做到这一点,因为我得到一个错误:

错误CS1502:最好的重载方法匹配... SomeFunction(长ID)...有一些无效的参数。

任何想法?

回答

10

您需要将结果转换为长,所以:

<%# SomeFunction((long)DataBinder.Eval(Container.DataItem, "Id")) %> 

另一种方法是做这样的事情:

<%# SomeFunction(Container.DataItem) %> 

和...

public string SomeFunction(object dataItem) { 
    var typedDataItem = (TYPED_DATA_ITEM_TYPE)dataItem; 

    // DO STUFF HERE WITH THE TYPED DATA ITEM 

    return "Hello";   

} 

这至少允许您使用数据项中的多个值(DataRows等)。

2

我认为你应该投射DataBinder.Eval(Container.DataItem,“Id”)。

0

我用这个成功了。数据源是一个List集合。

OnClientClick='<%# "return myFunction(\""+ Container.DataItem + "\");" %>' 

以及JavaScript函数...

function myFunction(imgPath) 
{ 
    alert(imgPath); 
}