Условное отображение данных в пользовательском элементе управления - PullRequest
0 голосов
/ 03 февраля 2010

В пользовательском элементе управления ASP.NET у меня есть строка:

<div>Web: <a href="<%# Eval("Web") %>"><%# Eval("Web") %></a></div>

Я бы хотел изменить его, чтобы этот HTML отображался, только если Web имеет значение.

Я пробовал обернуть String.IsNullOrEmpty(Eval("Web") as string) в сценарий на стороне сервера, но Eval можно использовать только внутри тега "binding" .

Каков наилучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 03 февраля 2010

Это немного обходной путь, но у вас может быть скрытое поле в вашем теге ItemTemplate:

<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("web") %>' />

Затем вы можете установить атрибут 'runat' элемента div в 'server' и датьDiv ID.

<div id="divWeb" runat="server" visible="false">Web: <a href="<%# Eval("Web") %>"><%# Eval("Web") %></a></div>

В своем коде позади вы проверяете, пусто ли HiddenField1.Если он не пустой, то установите «divWeb» visible = true.

Недостатком этого метода является то, что пользователь может вручную изменить значение HiddenField1.Однако, если это не проблема (с точки зрения безопасности), вы можете попробовать этот метод.

Обновление Ниже приведен фрагмент кода из встроенного раздела этого сайта :

<asp:Repeater id="collectionRepeater" Runat="server">  
     <ItemTemplate>
      <%# DataBinder.Eval(Container.DataItem, "OwnerId") %> - 
      <asp:literal ID="see" Runat="server" 
         Visible='<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") > 0 %>'>
         see pets
      </asp:Literal>
      <asp:literal ID="nopets" Runat="server" 
        Visible='<%# (int)DataBinder.Eval(Container.DataItem, "Pets.Count") == 0 %>'>
          no pets
       </asp:Literal>
       <br />
      </ItemTemplate>
    </asp:Repeater>

В есть также альтернативные варианты

1 голос
/ 03 февраля 2010

Что ж, MVC предназначался больше для логики такого типа на странице ... обычно с веб-формами все делается с помощью кода ... Кроме того, вы бы хотели сделать что-то вроде:

<div style='<%# ((Eval("Web") != null) ? "display" : "none") %>'>Web: <a href="<%# Eval("Web") %>"><%# Eval("Web") %></a></div>

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

...