数据库中有title(文章标题)和filename(文件名)两个字段,在DataGrid控件中使用了模板列,在模板列中定义了一个超链接,希望点击文章标题时能打开相应的文件:<asp:HyperLink runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.title")  %>' NavigateUrl='<%# "d:\\web\\xxxt\\uploadfile\\"+DataBinder.Eval(Container, "DataItem.filename") %>' Target="_blank">这工作正常,而且我看了csdn上的文章,绝大多数都是这样做的.但我看了《asp.net 高级编程》和MSDN帮助,都说DataBinder.Eval()性能低,要避免使用,于是我按照《asp.net 高级编程》第258页的做法改成以下语句(只改了第一个DataBinder.Eval()语句):
<asp:HyperLink runat="server" Text='<%# Container.DataItem("title") %>' NavigateUrl='<%# "d:\\web\\xxxt\\uploadfile\\"+DataBinder.Eval(Container, "DataItem.filename") %>' Target="_blank">
结果编译出错“System.web.UI.WebControls.DataGridItem.DataItem”表示“属性”,此处应为“方法”。
我对这个语法不熟悉,有哪位这样做过的,能告诉我哪里出错了吗?

解决方案 »

  1.   

    DataBinder.Eval()是通过反射机制来实现的,所以效率会低一点,不过为了程序清晰一些,牺牲一点效率也无所谓吧
      

  2.   

    Container.DataItem("title") 是错的,你这样是把属性按方法写了。
      

  3.   

    或者 Container.DataItem,"title"
      

  4.   

    DataBinder.Eval(Container.DataItem,"title")
      

  5.   

    jxufewbt:我说了不希望使用Eval()方法
      

  6.   

    jiang8282的确方法还是用了Eval吧,Winstonczc的方法不行,提示“无法将带[]的索引应用于object类型的表达式”,难道没人看过那本《asp.net高级编程》吗,richard andersen和bran francis写的