如何在代码隐藏中调用Eval?

Bry*_*yan 17 .net asp.net data-binding eval

如何从代码隐藏中调用Eval()?我知道这是像DataBinder.Eval(Container.DataItem,"name")之类的东西的前端快捷方式,但我无法编译这个该死的东西.我想,我错过了正确的方法参数.我想转这样的事情:

<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# Eval("name") %>'/>
Run Code Online (Sandbox Code Playgroud)

成:

<asp:Image ID="imgLogo" runat="server" ImageUrl='<%# GetImagePath(???) %>'/>
Run Code Online (Sandbox Code Playgroud)

代码隐藏:

protected string GetImagePath(????)
{
    //some code
    return "some/logical/path" + Eval("name");
}
Run Code Online (Sandbox Code Playgroud)

asp:Image控件位于一个绑定到SqlDataReader的转发器中.

Rub*_*ben 15

Eval是一种方法Page(TemplateControl实际上,这意味着它也存在UserControl).所以你不需要传递任何特殊参数:

protected string GetImagePath()
{
    //some code
    return "some/logical/path" + Eval("name");
}
Run Code Online (Sandbox Code Playgroud)

注意:您只能Eval在数据绑定时调用,但这也是隐含的情况<%# Eval(...) %>,因此不应该造成问题.

如果你想要绑定的实际对象,请使用GetDataItem(),Eval(x)基本上是指DataBinder.Eval(GetDataItem(), x).


tva*_*son 5

你有没有尝试过类似的事情:

<asp:Image ID="imgLogo" runat="server' ImageUrl='<%# GetImagePath( Convert.ToString( Eval("name") ) ) %>' />
Run Code Online (Sandbox Code Playgroud)

protected string GetImagePath( string image )
{
    return "some/logical/path/" + image;
}
Run Code Online (Sandbox Code Playgroud)