Дополнительные если заявления или повторный код в C # - PullRequest
3 голосов
/ 26 июля 2010

Попытка выяснить, что имеет больше смысла

<%foreach (var item in Model.items)
   {
%>
<tr>
    <td>
        <% if (!item.isMgmt)
           {  %>
        <a href="/MVC/AzureMail/Unfiled/<%:item.uName %>">
            <%:item.uName%></a>
        <% }
           else
           { %>
        <%:item.uName %>
        <% } %>
    </td>
</tr>
<% } %>

или

 <%foreach (var item in Model.items)
   {
%>
<tr>
    <td>
        <% if (!item.isMgmt)
           {  %>
        <a href="/MVC/AzureMail/Unfiled/<%:item.uName %>">
        <% } %>
              <%:item.uName%>
        <% if (!item.isMgmt)
           {  %>
              </a>
        <% } %>
    </td>
</tr>
<% } %>

Ответы [ 6 ]

12 голосов
/ 26 июля 2010

3-й вариант; метод расширения для условной ссылки.

public static string ConditionalHyperlink(this HtmlHelper helper, string url, string text, bool shouldLink){
 ...
}

Это делает ваш просмотр более читабельным.

<%= Html.ConditionalHyperlink("/MVC/AzureMail/Unfiled/" + item.Name, item.Name, item.isMgmt) %>
2 голосов
/ 26 июля 2010

Первый вариант.Кажется более логичным иметь всю связанную логику, которая создает ссылку в выражении, в отличие от разделения в варианте 2.

Редактировать: я думаю, что большинство согласны, что вариант 1 лучшеЯ сторонник HtmlHelpers (= более чистых просмотров), поэтому мое дополнительное предложение будет заключаться в том, что вы создадите Помощника, который обернет вашу логику.

1 голос
/ 26 июля 2010

, на мой взгляд, 1-й пример наиболее целесообразен, поскольку он хранит тег href и закрывающий тег в одном и том же месте логического оператора обработки.второй пример get повторяется и может привести к ошибкам, если код создается и разделяет два идентичных условия согласно # 2.

в любом случае, только мои мысли

1 голос
/ 26 июля 2010

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

0 голосов
/ 26 июля 2010
<%foreach (var item in Model.items)
{
%>
<tr>
    <td>
        <%: item.isMgmt ? item.uName : string.format("<a href=\"/MVC/AzureMail/Unfiled/{0}\"">{0}</a>, item.uName) %>
    </td>
</tr>
<% } %>

Я бы тоже порекомендовал использовать помощники html

0 голосов
/ 26 июля 2010

Действительно, вы должны рассмотреть возможность просмотра модели , которая охватывает модель вашего домена. Тогда ваша модель представления будет содержать свойство, которое ваше представление просто отображает, и оставит логику определения содержимое этого свойства вашему контроллеру. Итак, в вашем случае у вас будет свойство, которое возвращает строку с именем что-то вроде RenderName, и установите значение этого параметра в HREF, если isMgmt равно true, или обычную строку, если нет. Тогда, по вашему мнению, вы можете просто сделать это:

<%foreach (var item in Model.items)
   {
%>
<tr>
    <td>
        <%:item.RenderName %>
    </td>
</tr>
<% } %>

Таким образом, ваше мнение не имеет ничего общего с принятием решений, и у вас нет некрасивой наценки.

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