Как сделать условную логику в элементе управления ASP.NET DataRepeater? - PullRequest
3 голосов
/ 12 августа 2010

Я связываю свой элемент управления DataRepeater с таблицей, которая имеет много столбцов.Я хотел бы отображать только их подмножество, в зависимости от того, что заполнено.

Как / где я должен делать свои контрольные тесты в dataRepeater?Это код в шаблоне моего элемента:

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

Я получаю сообщение об ошибке: CS0103: имя «Контейнер» не существует в текущем контексте

1 Ответ

5 голосов
/ 12 августа 2010

С вами должно быть все в порядке:

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

Но в зависимости от того, что вы хотите сделать, я, вероятно, напишу функцию для обработки привязки данных, чтобы сохранить разделение между дисплеем и бизнесом.логика.

например,

в вашем 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.Я знаю, что некоторым это может показаться немного глупым, но мне нравится отделять бизнес-логику от логики отображения везде, где это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...