MVC视图中的分支逻辑

时间:2010-05-26 01:29:21

标签: asp.net-mvc views

我发现自己在我的视图中编写了很多代码,看起来像下面的代码。在这种情况下,我想为新手添加一些解释性HTML,为专家用户添加不同的HTML。

<% if (ViewData["novice"] != null ) { %>
some extra  HTML for a novice
<% } else { %>
some HTML for an expert
<% } %>

这是表示逻辑,因此它在视图与控制器之间是有意义的。然而,它变得非常难看,特别是当ReSharper想要移动所有的支撑以使其更加丑陋时(有没有办法将其关闭以用于视图?)。

我的问题是这是否合适,还是应该将控制器分支到两个单独的视图?如果我做两个视图,我将有很多重复的HTML来维护。

或者我应该使用共同的部分视图来共享两个单独的视图吗?

2 个答案:

答案 0 :(得分:2)

理想情况下,这种逻辑将在视图模型中处理,视图应该只是渲染模型。

所以你可能会在你看来有类似的东西:

<%= ViewData["helptext"]  %>

并且您在控制器中的逻辑将类似于:

ViewData["helpText"] = isNovice ? noviceText : expertText;

通过这种方式,您可以将该逻辑推回控制器,并使您的视图保持良好和干净

答案 1 :(得分:1)

您正在尝试使用相同的模型创建2个完全独立的html页面。你想要一个单独的视图。不要试图用条件分支逻辑来巧妙地设计模式。

HTML助手在这里对你没什么帮助,因为看起来你不会重复除了if之外的其他逻辑。