2013-04-30 125 views
3

你好,我有一个简单的问题,我认为,MVC4剃刀模板像

我有这样一个CSHTML:

<div id="box"> 
    @if (model.View == "item1") 
    { 
     <div id="item1"> 
      ... 
     </div> 
    } 
    else 
    { 
     <div id="item2"> 
      ... 
     </div> 
    } 
    <div id="itemDescription"> 
     ... 
    </div> 
</div> 

当我通过模型传递参数取决于参数显示一些内容,因为在这两种情况下文档的其余部分是相同的。

是否有另一种更好的方法来实现这一目标?

谢谢!

+0

是否会有在每个'item1'太多的内容和'item2'那么你最好把他们的部分意见。另外,你可以创建一个html助手,并让它决定显示哪个视图并构建/调用视图。 – 2013-04-30 12:06:11

+0

您确定要这么做吗?也许它正在工作,但它有点吸吮; p添加任何东西都会很痛苦。 – nilphilus 2013-04-30 12:10:46

+0

是的,我已经为每个div做了部分视图,这只是一个简单的例子。如果我创建一个HtmlHelper,我也必须传递一个参数,我想,它会比我所采用的解决方案有一些优势吗? – gonzalomelov 2013-04-30 12:11:59

回答

3

不是真的;这是一个完美的做事方式。如果DIV ID总是model.View值相匹配,可以缩短到这一点:

<div id="box"> 
    <div id="@(model.View)"> 
     ... 
    </div> 
    <div id="itemDescription"> 
     ... 
    </div> 
</div> 

否则,你的做法是好的。按照冯五世的评论,你可能要考虑局部视图如果包含的标签是啰嗦(或者你需要重复在多个地方逻辑):

http://www.asp.net/mvc/videos/mvc-2/how-do-i/how-do-i-work-with-data-in-aspnet-mvc-partial-views

+0

谢谢!唯一我不喜欢的是传递字符串参数并在视图中进行比较。但我不能认为在另一个更好的解决方案.. – gonzalomelov 2013-04-30 12:14:20

+0

这是表示逻辑,所以视图是它属于的地方。这是完全可以接受的,并与MVC范式保持一致,以这种方式来完成任务。 – 2013-04-30 12:16:15

4

你的做法是好的,如果有在这两个div中并不多。否则,创建两个局部视图,以帮助保持整洁:

@if (model.View == "item1") 
{ 
    @Html.RenderPartial("Item1"); 
} 
else 
{ 
    @Html.RenderPartial("Item2"); 
} 
+0

+1如果涉及部分内容,这是如何将数据传递给它们的一个完整示例。我在这个问题上外推,以表明像'@HtmlRenderPartial(model.View)'这样简单的东西可能也很好。 – 2013-04-30 12:15:07

+0

是的,我已经有一些局部视图。就像我评论的那样,我不喜欢字符串比较来选择渲染某些视图。谢谢! – gonzalomelov 2013-04-30 12:15:22