c# - 如何在 ASP.NET DataRepeater 控件中执行条件逻辑?

标签 c# asp.net data-binding asp.net-2.0 datarepeater

我将我的 DataRepeater 控件绑定(bind)到一个包含许多列的表。我只想显示其中的一个子集,具体取决于填充的内容。

我应该如何/在何处进行 dataRepeater 中的条件测试?这是我的项目模板中的代码:

<% if (0= (DataBinder.Eval(Container.DataItem, "first").ToString().Length))
{
   i++;
}
    %>

我得到的错误是:CS0103:当前上下文中不存在名称“Container”

最佳答案

你应该没问题:

<% if (0 == (Eval("first").ToString().Length))
{
   i++;
}
%>

但根据您想要执行的操作,我可能会编写一个函数来处理数据绑定(bind),以保持显示和业务逻辑之间的分离。

例如

在你的 aspx 中:

<asp:Repeater id="myRepeater" runat="server" onDataItemBound="FillInRepeater">
<ItemTemplate>
<div class="contactLarge">
    <div style="background-color:#C5CED8;clear:both"><asp:Label runat="server" ID="title"></asp:Label>
    .
    .
    .
</div>
</ItemTemplate>
<AlternatingItemTemplate>
</AlternatingItemTemplate>
</asp:Repeater>

在您的代码隐藏中:

protected void FillInRepeater(object sender, RepeaterItemEventArgs e)
{
  if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  {
    //in here you bind to your repeater labels and stuff then do all that sorta logic.
    //Grab Primary Data
    string titleText = DataBinder.Eval(e.Item.DataItem, "title").ToString();
    string somethingElseText = DataBinder.Eval(e.Item.DataItem, "somethingElse").ToString();
    string maybeSeeMaybeDontText = DataBinder.Eval(e.Item.DataItem, "maybeSeeMaybeDont").ToString();

    //Find the controls and populate them according the to row
    Label titleLabel = (Label)e.Item.FindControl("title");
    Label somethingElseLabel = (Label)e.Item.FindControl("somethingElse");
    Label maybeSeeMaybeDontLabel = (Label)e.Item.FindControl("maybeSeeMaybeDont");

    // display the fields you want to
    titleLabel.Text = titleText;
    somethingElseLabel.Text = somethingElseText;

    // here is where you could do some of your conditional logic
    if (titleText.Length != 0 && somethingElseText.Length != 0)
    {
        maybeSeeMaybeDontLabel.Text = maybeSeeMaybeDontText;
    }
  }
}

就个人而言,我更喜欢以这种方式做事,而不是在 ASP 内部做任何逻辑。我知道这对某些人来说可能有点傻,但我喜欢尽可能将我的业务逻辑与显示逻辑分开。

关于c# - 如何在 ASP.NET DataRepeater 控件中执行条件逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3464470/

相关文章:

c# - 无需使用 Visual Studio 2010 中的设计模式即可找到事件的正确参数

c# - 绑定(bind)到元组列表

c# - 如何按属性对列表进行排序并对 HTML Razor 中的元素进行分组?

php - 什么是 ASP.NET 等同于 PHP 中的 memcached?

asp.net - 如何调试 [Authorize] 属性中的问题

FlowDocument 中的 WPF 句柄链接

winforms - .net WinForms 数据绑定(bind)使用 Lambda 而不是属性

c# - Newtonsoft.Json 错误的 JSON 转义序列 :\v.

c# - 如何在 c# blazor 中下载 xls 文件

c# - OpenXML 中的制表符