ASP.NET Webforms中ListView中的内联代码?

时间:2013-10-22 07:36:31

标签: c# asp.net listview webforms

我正在尝试使用带有内联代码的ASP.NET WebFroms ListView(对于全球化,Frame.Article来自resx文件):

      <asp:ListView runat="server" ID="demo" ItemType="Quarters<int>">
        <LayoutTemplate>
                    <strong><%# Frame.Article %></strong>                        
                    <strong><%# Frame.Customer %></strong>   
                    <asp:PlaceHolder runat="server" ID="itemPlaceholder" />  
        </LayoutTemplate>
        <ItemTemplate>
            <p><%# Item.Q1 %></p>
        </ItemTemplate>
    </asp:ListView>

代码背后:

 Quarters<int> quarter = new Quarters<int>();
 quarter.Q1 = 10;
 quarter.Q2 = 20;
 quarter.Q3 = 30;
 quarter.Q4 = 40;

 demo.DataSource = new List<Quarters<int>>(){quarter};
 demo.DataBind();

但我总是得到这个错误:

  

编译器错误消息:CS1061:'System.Web.UI.WebControls.ListView'   不包含'DataItem'的定义,也没有扩展方法   'DataItem'接受类型的第一个参数   可以找到'System.Web.UI.WebControls.ListView'(你错过了吗?   使用指令或程序集引用?)

有没有让这项工作?

1 个答案:

答案 0 :(得分:3)

在遇到同样的问题之后遇到了这个问题。如果有人在将来做同样的事情,请在此处发布答案。

原因是<%# Frame.Article %>内的数据绑定表达式(例如LayoutTemplate)。 ASP.NET不支持此类模板中的数据绑定表达式。

上述特定问题的最简单解决方案是将这些表达式移出ListView模板,即:

  <strong><%# Frame.Article %></strong>                        
  <strong><%# Frame.Customer %></strong> 
  <asp:ListView runat="server" ID="demo" ItemType="Quarters<int>">
    <LayoutTemplate>  
        <asp:PlaceHolder runat="server" ID="itemPlaceholder" />  
    </LayoutTemplate>
    <ItemTemplate>
        <p><%# Item.Q1 %></p>
    </ItemTemplate>
</asp:ListView>