Является ли условная логика в MVC3 представлением хорошей практикой? - PullRequest
3 голосов
/ 21 января 2012

Вот пример, я использую его для вывода каждого Category в моей базе данных. Это рекурсивные отношения, поэтому Category может иметь List<Category> подкатегорий.

@model DSS.WebUI.Models.CategoriaModel

<div class="categories">
    <h3>
        @if (Model.Subcategorias.Count > 0)
        {
            <img src="http://i.imgur.com/t5UXT.gif" />   
            <a href="#">@Model.Nombre</a>
            <p class="subtext">@Model.Encabezado</p>
        }
        else
        {
            <a class="nochild" href="#">@Model.Nombre</a>
            <p class="subtext nochild">@Model.Encabezado</p>
        }
    </h3>
    <div>
        <ul>
            @Html.DisplayFor(x => x.Subcategorias)
        </ul>
    </div>    
</div>

Условная логика похожа на эту кошерную? Или это кодовый запах, которого мне следует избегать и как?

Ответы [ 3 ]

7 голосов
/ 21 января 2012

Этот вид условной логики выглядит хорошо для меня. Основываясь на количестве подкатегорий, имеющихся в вашей модели представления, вы генерируете тот или иной фрагмент HTML. Что было бы плохо, так это повторять одно и то же условие с одинаковым выводом во многих местах вашего приложения. В этом случае вы можете преобразовать его в частичное или написать собственный помощник HTML.

1 голос
/ 21 января 2012

То, как вы это делаете, прекрасно.

Всего две вещи, чтобы убедиться в идеальном разделении интересов:

  1. Используйте IEnumerable.Any() как в

    Subcategorias.Any() 
    

    вместо

    Subcategorias.Count > 0;
    

    Это выражает ваши намерения лучше и в некоторых случаях быстрее (в некоторых случаях счетчик должен выполнять итерацию по всемусписок, в то время как Any () должен читать только первый элемент).

  2. Убедитесь, что ваш Model.Subcategorias - простой список.Если вы получили данные из модели Entity Framework, это может быть лениво оцененный прокси-сервер, который может вызвать вызов базы данных.

1 голос
/ 21 января 2012

Я думаю, что лучше реализовать вашу логику в контроллере, а не в кодах HTML, в этих ситуациях я пытаюсь сделать что-то вроде следующего:

    @if (ViewBag.SubCategoryHasData)
    {
        <img src="http://i.imgur.com/t5UXT.gif" />   
        <a href="#">@Model.Nombre</a>
        <p class="subtext">@Model.Encabezado</p>
    }
    else
    {
        <a class="nochild" href="#">@Model.Nombre</a>
        <p class="subtext nochild">@Model.Encabezado</p>
    }

и внутри вашего действия:

    ViewBag.SubCategoryHasData = Subcategorias.Count > 0;

надеюсь, что это поможет.

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