从ASP.NET MVC中的部分视图中删除逻辑

ddd*_*ddd 7 asp.net-mvc refactoring partial-views

我知道视图中不应该包含代码,但在我正在处理的项目中,我在视图中有很多逻辑.

我的主页有

<% Html.RenderPartial("SearchResults"); %>
Run Code Online (Sandbox Code Playgroud)

现在在局部视图中,我有很多这样的逻辑;

<div id="RestaurantsList">
<%if (Model.restaurantsList.Count() > 0)
{
    foreach (var item in Model.restaurantsList)
    { %>
        <% Html.RenderPartial("SearchResult", item); %>

    <%
    } %>
<%
}
else
{
    Html.RenderPartial("NoResults");

} %>
Run Code Online (Sandbox Code Playgroud)

现在我可以让家庭控制器返回一个基于列表为空的不同视图,但我真的不想这样,因为索引视图有一些我想要显示的东西,无论是否有结果.

我能想到的另一件事就是将它封装在一个辅助方法中,比如Html.SearchResults.但是我需要帮助器来为每个搜索结果调用renderPartial.这似乎不是关心的干净分离.

我仍然需要在局部视图中使用第一个if语句.

你最好怎么处理这个?

Pra*_*yan 13

我个人认为这没关系.您使用的逻辑与模型需要如何显示完全相关.

您只需要注意并确保您永远不会混淆业务逻辑,数据访问逻辑或任何其他与模型显示没有严格关联的东西.


TWi*_*ars 10

我同意Praveen Angyan的回答.我唯一可以说的是扩展他的答案是将一些逻辑放在ViewModel中.

例如,在ViewModel中,您可以隐藏

Model.restaurantsList.Count() > 0

方法或财产背后.

例如:

<%if (Model.HasResturant){...}%>
Run Code Online (Sandbox Code Playgroud)