В представлении Каков наиболее эффективный способ скрыть HTML, связанный с нулевым значением, из модели? - PullRequest
1 голос
/ 16 июля 2009

Это, вероятно, очень простой вопрос с простым ответом, но я новичок, когда дело доходит до ASP.NET (MVC).

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

Пример:

<% foreach (var item in Model)
   { %>

    <h3>
        <%= Html.ActionLink(item.name, "Details", new { id = item.ID})%></h3>
    <div>
        <%= Html.Encode(item.address) %><br />
        <%= Html.Encode(item.city) %>,
        <%= Html.Encode(item.state) %>
        <%= Html.Encode(item.zip) %>
    </div>
<% } %>

В приведенном выше примере, если для item.address есть нулевое значение, я хочу, чтобы тег <br/> также был скрыт, чтобы отображалась только строка zip города, штата.

Я ищу что-то более элегантное, чем просто поставить условное обозначение <% if () { %>. Спасибо.

Ответы [ 3 ]

3 голосов
/ 16 июля 2009

Вы могли бы написать метод расширения для HtmlHelper, который проверял бы, было ли оно пустым или нет, и ничего не выводил бы, если бы он был, или поле + <br />, если это не было.

public static string FieldLine(this HtmlHelper helper, object value, bool addBr) 
{
    if (value == null)
    {
        return string.Empty;
    }
    else if (addBr)
    {
        return helper.Encode(value) + "<br />";
    }
    else
    {
        return helper.Encode(value);
    }
}

Не забудьте импортировать пространство имен вашего класса расширения в ваш View aspx. Для этого примера, если бы мое пространство имен было «MvcApplication1.Extensions», я бы использовал

<%@ Import Namespace="MvcApplication1.Extensions" %>

вверху моего просмотра. Тогда, чтобы использовать это, это было бы просто:

<%= Html.FieldLine(item.address, true) %>
<%= Html.FieldLine(item.city, true) %>

и т.д.

2 голосов
/ 16 июля 2009

Я добавляю другой ответ, основываясь на том, что womp описано выше ... Я бы сделал помощника немного более универсальным, чем он, и все еще соблюдал бы оригинальный код Encode ...

public static string EncodeWithHtml(this HtmlHelper helper, object value, string html) 
{
   if (value == null)
   {
      return string.Empty;
   }
   else
   {
      return helper.Encode(value) + html;
   }
}

Это позволит вам сделать что-то вроде:

<%= Html.EncodeWithHtml(item.address, "<br />") %>

или

<%= Html.EncodeWithHtml(item.address, "<img src=\"images\home.gif\"><br />") %>
0 голосов
/ 16 июля 2009

Предполагая, что item.address является строкой ...

<%= Html.Encode(item.address) %>
<% if (!string.IsNullOrEmpty(item.address)) { %>
<br />
<% } %>

Конечно, это напечатано в небольшом поле для комментариев, так что будьте осторожны с орфографией, регистром и т. Д.

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