【问题标题】:Manipulate databound values in databound control? ASP.NET Webforms在数据绑定控件中操作数据绑定值? ASP.NET 网络表单
【发布时间】:2011-04-04 09:07:01
【问题描述】:

我正在 ASP.NET Webforms 的 DataBound 控件内处理以下标记。

<asp:TemplateField HeaderText="DomainID">
    <ItemTemplate>
        <%  for (int i = 0; i < 10; i++)
            {%>
            <%#Eval("DomainID"); %>
            <%  ++i;
            } %>
        </ItemTemplate>
</asp:TemplateField>

是否可以在&lt;%#Eval("DomainID"); %&gt; 部分中实际编写代码块,例如:

<%# var x = Eval("DomainID"); if ((int)x)>0){//print this}   %>

【问题讨论】:

    标签: c# asp.net data-binding webforms controls


    【解决方案1】:

    当它开始变得如此复杂时,我总是建议更改您的结构以使用服务器端控件并通过该控件的OnDataBinding 事件进行绑定。

    例子:

    <asp:TemplateField HeaderText="DomainID"> 
        <ItemTemplate> 
            <asp:Literal ID="ltDomainID" runat="server" 
                OnDataBinding="ltDomainID_DataBinding" />
        </ItemTemplate>
    

    然后在你的代码绑定中实现OnDataBinding:

    protected void ltDomainID_DataBinding(object sender, System.EventArgs e)
    {
        Literal lt = (Literal)(sender);
        for (int i = 0; i < 10; i++) 
        {
            var x = (int)(Eval("DomainID"));
            if (x > 0)
            {
                lt.Text += x.ToString();
            }
            ++i; 
        }
    }
    

    你的逻辑可能有点混乱,但这应该会给你基本的想法。实现逻辑服务器端让您的 aspx 更加简洁,并将逻辑直接绑定到输出控件(在本例中为 Literal)。

    【讨论】:

    • 我认为您或多或少已经确定了我的逻辑。我不想为了这么简单的事情而在我的代码中编写代码,但似乎我可能不得不这样做。
    • @maxp 我通常使用 webforms 以这种方式实现我的所有数据绑定,因为它将所有code 排除在 aspx 之外,并且它使得移动和调整 aspx 变得非常容易。我还在我所有的数据绑定代码周围添加了一个#region 标签,这样它们就在一起了,下一个人可以轻松找到它,而无需寻找它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    相关资源
    最近更新 更多