«если» считается вредным в ASP.NET MVC View (.aspx) файлах? - PullRequest
5 голосов
/ 11 января 2010

Я помню, как видел блог (или что-то в этом роде), в котором говорилось, что вы не должны использовать <% if ...%> в файлах .aspx в ASP.NET MVC, но я не могу вспомнить, что было сказано в качестве альтернативы. Кто-нибудь может вспомнить это и указать мне на это?

Ответы [ 7 ]

10 голосов
/ 11 января 2010

По сути, это означает, что у вас не должно быть больших операторов if в ваших представлениях, ваши контроллеры и ViewModels должны иметь возможность обрабатывать логику. Пример:

<h2 class="title">
    <% if (ViewData["category"] == null { %>
        All Products
    <% } else { % >
        <%= ViewData["category"] %>
    <% } %>
</h2>

Должно быть:

<h2 class="title>
    <%= Model.Title %>
</h2>

Если ваши контроллеры и ViewModels не могут обрабатывать логику, вы должны написать Html Helpers для более сложной логики (таким образом, делая ее многоразовой и более читаемой).

<h2 class="title>
    <%= Html.GetPageTitle(Model.Category) %>
</h2>
9 голосов
/ 11 января 2010

Я думаю, что вы имеете в виду пост Роба Конери , где он упоминает правило, которое он использует:

Если есть if, сделайтеhelper

Итак, чтобы ответить на ваш вопрос, идея заключается в том, что если вам нужно использовать if в вашем представлении, вам следует рассмотреть возможность добавления вспомогательного метода расширения, чтобы вместо этого отображать эту часть вашего представления..

2 голосов
/ 11 января 2010

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

public class HomeController :Controller
{
    public ActionResult Category(string? category)
    {
       View viewToReturn;
       if (category == null)
          viewToReturn = View("CategoryList", repo.GetAllCategory); /// it is a View
       else
          viewToReturn = View("Category", repo.GetCategory(category)); /// it is a View

       return viewToReturn;
    }
}

Хорошо, ответ Мартина также из лучших практик.

2 голосов
/ 11 января 2010

Я не уверен, что это то, что вы видели, но здесь - это блог, в котором упоминается.См. Пункт № 11.

0 голосов
/ 11 января 2010

Это проблема, о которой вы говорите?

выражения привязки нельзя использовать в блоке операторов <%%>, так же как операторы нельзя использовать в блоке выражений привязки <% #%>

- Брюс (sqlwork.com)

"Джейсон" <> написал в сообщении Новости: 23C11F83-A2AA-406d-BDEC -...

Что не так со следующим оператором if на моей странице aspx?

«Т» Тогда%>

Я получаю сообщение об ошибке: BC30201: ожидается выражение.

Брюс Баркер

0 голосов
/ 11 января 2010

Я подозреваю, что это была попытка избежать спагетти-кода, а не ограничивать использование "если", вот ссылка на блог Роба Конери об этом, он на самом деле упоминает использование помощников вместо Ifs, так что быть тем, что вы видели ASP.NET MVC: избегать супа тегов

0 голосов
/ 11 января 2010

Я чувствую, что это нормально.Это позволяет представлению контролировать свою презентацию.

...