Это, безусловно, возможно, если аргумент типа указан через подкласс A:
public class B extends A {}
Class> typeArg = TypeResolver.resolveRawArgument(A.class, B.class);
assert typeArg == String.class;
TypeResolver доступен через TypeTools .
Мое личное мнение, что это нормально. Логика, которую вы использовали, полностью связана с тем, как модель должна отображаться.
Вам просто нужно знать и убедиться, что вы никогда не смешиваете бизнес-логику, логику доступа к данным или что-либо еще, что не является t строго привязан к отображению модели.
Я согласен с ответом Правин Ангьян. Единственное, что я мог бы сказать, чтобы расширить его ответ, - это поместить часть логики в ViewModel.
Например, в ViewModel вы можете скрыть
Model.restaurantsList.Count ()> 0
за методом или свойство.
Пример:
<%if (Model.HasResturant){...}%>
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");
} %>
Правин Ангьян прав - это логика представления, и хорошо, что она там, где она есть.
Но это не отменяет необходимости в более аккуратных представлениях.
Просто хотел поделиться небольшим улучшением.
Если мы прикрепим крошечный метод HtmlHelper, мы можем сократить представление примерно до такого:
<div id="RestaurantsList">
<% if (Model.HasRestaurants)
Html.RenderPartialForEach("SearchResult", Model.restaurantsList);
else
Html.RenderPartial("NoResults"); %>
</div>
Для некоторых - он может выглядеть нечитабельным и красивым, но мне он подходит достаточно хорошо.