MVC 视图中的分支逻辑
Posted
技术标签:
【中文标题】MVC 视图中的分支逻辑【英文标题】:Branching logic in an MVC view 【发布时间】:2010-05-26 01:29:21 【问题描述】:我发现自己在我的视图中编写了很多类似于下面的代码的代码。在这种情况下,我想为新手添加一些解释性 html,为专家用户添加不同的 HTML。
<% if (ViewData["novice"] != null ) %>
some extra HTML for a novice
<% else %>
some HTML for an expert
<% %>
这是表示逻辑,因此它在视图与控制器中是有意义的。但是,它会很快变得丑陋,尤其是当 ReSharper 想要移动所有的大括号以使其更加丑陋时(有没有办法为视图关闭它?)。
我的问题是这是否正确,或者我应该在控制器中分支到两个单独的视图?如果我做两个视图,我将有很多重复的 HTML 需要维护。
或者我应该做两个单独的视图,对共同的东西有一个共享的部分视图?
【问题讨论】:
【参考方案1】:理想情况下,这种逻辑将在视图模型中处理,并且视图应该只是呈现模型。
所以你可能有类似的想法:
<%= ViewData["helptext"] %>
您在控制器中的逻辑类似于:
ViewData["helpText"] = isNovice ? noviceText : expertText;
这样您就可以将该逻辑推回控制器并保持视图整洁
【讨论】:
我可以看到这样做的好处,但是如果文本是复杂的 HTML 标记,比如图像和其他东西怎么办?现在您的控制器中有 HTML。另外,感谢您修复我的代码示例 尼斯 lomax 好多了。我喜欢。 +1 这取决于复杂文本的情况以及需要多少更改,但我不明白为什么不能使用相同的方法来渲染可变部分? 如果它真的很复杂,你也可以把它分解成一个局部视图【参考方案2】:您正在尝试使用相同的模型创建 2 个完全独立的 html 页面。你想要一个单独的视图。不要试图用条件分支逻辑来巧妙地设计模式。
HTML 助手在这里帮不了多少忙,因为除了 if else 之外,您似乎不会重复太多逻辑。
【讨论】:
我只能说即使没有重复的逻辑,我更愿意使用帮助程序而不是复制代码。重复代码只会导致维护头痛,应该不赞成 我认为您不需要单独的视图,因为它会产生额外的维护开销。我更倾向于将逻辑推回控制器并拥有一个干净的视图 您可以将重复代码放在部分中,但从整体上看,您似乎想要两个单独的视图,即“专家用户的不同 HTML”重复代码很糟糕,违反设计模式更糟糕 IMO .以上是关于MVC 视图中的分支逻辑的主要内容,如果未能解决你的问题,请参考以下文章