Удаление логики от частичных представлений в ASP.NET MVC

Это, безусловно, возможно, если аргумент типа указан через подкласс A:

public class B extends A {}

Class typeArg = TypeResolver.resolveRawArgument(A.class, B.class);
assert typeArg == String.class;

TypeResolver доступен через TypeTools .

7
задан ddd 5 June 2009 в 16:25
поделиться

4 ответа

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

Вам просто нужно знать и убедиться, что вы никогда не смешиваете бизнес-логику, логику доступа к данным или что-либо еще, что не является t строго привязан к отображению модели.

13
ответ дан 6 December 2019 в 07:07
поделиться

Я согласен с ответом Правин Ангьян. Единственное, что я мог бы сказать, чтобы расширить его ответ, - это поместить часть логики в ViewModel.

Например, в ViewModel вы можете скрыть

Model.restaurantsList.Count ()> 0

за методом или свойство.

Пример:

<%if (Model.HasResturant){...}%>
10
ответ дан 6 December 2019 в 07:07
поделиться

this answer has nothing to do with your question.

However, I just want to let you know that calling Html.RenderPartial() inside a loop is not efficient.
ASP.NET MVC - For loop inside RenderPartial or Outside RenderPartial

Changing it to something like below would be better.

<%if (Model.restaurantsList.Count() > 0)
{
    // render the Restaurant item right away
    foreach (var item in Model.restaurantsList) { %>
        <div>
            <%= Html.Encode(item.RestaurantName); %><br />
            <%= Html.Encode(item.Address); %>
        </div>
    <% }
}
else
{
    Html.RenderPartial("NoResults");    
} %>
1
ответ дан 6 December 2019 в 07:07
поделиться

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

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

<div id="RestaurantsList">
<% if (Model.HasRestaurants)
    Html.RenderPartialForEach("SearchResult", Model.restaurantsList);    
else    
    Html.RenderPartial("NoResults"); %>
</div>

Для некоторых - он может выглядеть нечитабельным и красивым, но мне он подходит достаточно хорошо.

1
ответ дан 6 December 2019 в 07:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: