2010-05-26 61 views
5

我发现自己在我的视图中编写了很多类似下面代码的代码。在这种情况下,我想为新手添加一些解释性HTML,并为专家用户添加不同的HTML。MVC视图中的分支逻辑

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

这是表示逻辑,所以它是有道理的,它是在一个视图与控制器。然而,它变得非常难看,特别是当ReSharper想要移动所有大括号以使其变得更丑陋时(有没有办法关闭视图?)。

我的问题是,这是否是正确的,或者我应该在控制器转移到两个不同的看法?如果我做了两个视图,我会有很多重复的HTML来维护。

或者我应该做的是共同的东西共享局部视图两个独立的看法?

回答

2

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

所以,你可能有这样的事情在你看来:

<%= ViewData["helptext"] %> 

和你的控制器逻辑是这样的:

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

这样你可以把这个逻辑回控制器并保持你的意见非常干净

+0

我可以看到这个优点,但是如果文本是复杂的HTML标记,比如图片和内容呢?现在你的控制器里有HTML。 另外,感谢您修复我的代码示例 – 2010-05-26 01:53:43

+0

Nice lomax好得多。我喜欢。 +1 – 2010-05-26 01:58:43

+0

这取决于复杂文本的情况以及需要多少更改,但我不明白为什么不能使用同一方法呈现可变部分? – lomaxx 2010-05-26 23:37:16

1

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

HTML佣工不会帮助你在这里多,因为它似乎你不会被重复比的if else其他很多逻辑。

+0

我只能说我即使有重复的逻辑我宁愿用,而不是重复代码帮手了。代码的重复只会导致维护头痛,应该皱起了眉头 – 2010-05-26 01:45:59

+0

我不认为你想要一个单独的视图,因为它会造成额外的维护开销。我更倾向于将逻辑推回到控制器并拥有单一的清晰视图 – lomaxx 2010-05-26 01:49:37

+0

您可以将重复代码放入partials中,但大图似乎需要两个单独的视图,即“专家用户的不同HTML”重复代码不好,针对设计模式的工作更差。 – 2010-05-26 01:53:50