2012-06-14 3 views
0

Я новичок в ASP.NET, и я пытаюсь выяснить, как показывать только фрагмент кода в файле .aspx, если значение не равно null или пробельные. Вот что у меня есть, в DetailsView:как условно показать/скрыть ссылку в DetailsView ItemTemplate

<asp:TemplateField HeaderText="Phone"> 
    <EditItemTemplate> 
     <asp:TextBox runat="server" ID="txtPhone" Text='<%# Bind("Phone") %>'></asp:TextBox> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <a href="tel:<%# Eval("Phone") %>"> 
      <i class="icon-phone"></i> 
      <%# Eval("Phone") %> 
     </a> 
    </ItemTemplate> 
</asp:TemplateField> 

Я хочу, чтобы условно скрыть весь a тег, если Eval("Phone") является нулевым или пробелы. Я бы предпочел сделать все это в разметке, а не делать что-то в коде.

ответ

1

David's answer указал мне в правильном направлении:

<asp:HyperLink runat="server" NavigateUrl='tel:<%# Eval("Phone") %>' 
     Visible='<%# !string.IsNullOrWhiteSpace(Eval("Phone").ToString()) %>'> 
    <i class="icon-phone"></i> 
    <%# Eval("Phone") %> 
</asp:HyperLink> 
+0

Nice. Рад, что я мог бы помочь, даже если бы мой точный код не сработал для вас. – David

0

Сначала измените его на элемент управления ASP: Hyperlink. Тег html A не имеет удобного свойства Visible, такого как элемент управления ASP: Hyperlink.

Затем вы можете установить видимость декларативно.

<asp:HyperLink runat="Server" NavigateUrl='tel:<%# Eval("Phone") %>' Text='<%# Bind("Phone") %>' Visible = '<%= DataBinder.Eval(Container.DataItem("phone").ToString().Trim() == "" %>' /> 
+0

Что должен 'Container' быть? Это какое-то существующее свойство, которое должно существовать, или я должен заменить его чем-то другим? 'ID' моего' DetailsView' - 'dvOrg', но попытка выполнить' dvOrg.DataItem («Телефон») 'имеет ошибку« ожидается метод, делегат или событие ». –

+0

Container.DataItem существует только до тех пор, пока вы находитесь внутри элемента управления данными, такого как ретранслятор, FormView, DetailsView и т. Д. Документация здесь: http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx – David

+0

«Контейнер», похоже, не существует, VS хотел импортировать некоторый класс «Container» из «System.ComponentModel» в .aspx. –

0

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

protected string NullHandler()(object gridViewObject) 
    { 
     if (object.ReferenceEquals(gridViewObject, DBNull.Value)) 
     { 
      return "Empty"; 
     } 
     else 
     { 
      return gridViewObject.ToString(); 
     } 
    } 

, то вы можете поставить как ниже

<asp:Label ID=”phoneLbl” runat=”server” Text=’<%# NullHandler(Eval(“Phone”)) %>’> 

Надеется, что это помощь.

+0

Я говорю со ссылкой на Eval вместо DataBinder.Eval() – MMK