ASP.NET MVC - PartialView架构问题

gri*_*egs 2 architecture asp.net-mvc partial-views

这更像是一个架构师问题,而不是一个需要代码的问题.

我有一个页面,要求我显示特定项目的状态.让我们说,为了简洁起见,有两种状态,即开放和封闭.

当项目打开时,我想显示一个PartialView,向我展示一组细节.如果项目已关闭,我想显示具有不同细节的PartialView.

现在我知道我可以在aspx中进行检查并渲染一个或者另一个,但我正在尝试减少aspx代码中的决策点数量.我相信aspx中应该有最少的实际代码.

此外,还有两个以上的状态,因此"if"语句会堆积起来并变得混乱.

有人解决过这样的问题吗?

我应该创建一个Helper来做到这一点吗?我可以,而且我不确定如何做到这一点,在视图的ActionResult中处理这个?例如,我可以在动作结果中渲染PartialViews并将其作为普通视图的一部分返回吗?

Chr*_*rez 7

您可以在控制器中执行逻辑并定义一个ViewData值,该值包含要呈现的局部名称...所以在控制器中,

if (Project.Status == "Open") {
    ViewData["StatusPartial"] = "OpenPartial";
} else {
    ViewData["StatusPartial"] = "ClosedPartial";
}
Run Code Online (Sandbox Code Playgroud)

然后在aspx中做

<%=Html.RenderPartial(ViewData["StatusPartial"]) %>
Run Code Online (Sandbox Code Playgroud)


Tom*_*han 5

如果你将项目的状态编码为Enum,你实际上可以使用这个巧妙的技巧在任何时候获得没有任何if子句的正确部分:

<% Html.RenderPartial(Enum.GetName(typeof(ProjStat), prj.Status) + 'Partial'); %>
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我假设是的名称EnumProjStat,并且你有部分视图的命名约定对应于OpenPartial.ascxClosedPartial.ascx为两个状态值OpenClosed.