MVC4 Razor模板类似于什么?

3

你好,我有一个简单的问题,

我有一个类似于以下代码的cshtml文件:

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

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

还有其他更好的实现方法吗?

谢谢!


如果item1item2中的内容过多,最好将它们放在部分视图中。此外,您可以创建一个HTML助手,让它决定要显示哪个视图并构建/调用该视图。 - von v.
你确定要这样做吗?也许它能工作,但有点糟糕;添加任何东西都会非常痛苦。 - nilphilus
是的,我为每个div创建了一个部分视图,这只是一个简单的例子。如果我创建一个HtmlHelper,我认为也必须向它传递一个参数,那么它是否比我采取的解决方案更有优势? - gonzalomelov
即使使用它,您也可能最终陷入太多逻辑进入视图的情况,如果您还将其与控制器中的逻辑混合使用,则会变得痛苦。;-> - nilphilus
2个回答

4

如果这两个 div 里面没有太多内容,那么你的方法是可以的。否则,创建两个局部视图来保持整洁:

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

如果涉及到部分视图,这是一个传递数据给它们的整洁示例。我会在问题上进行推断,建议像@HtmlRenderPartial(model.View)这样简单的方法也可以使用。 - Ant P
是的,我已经有一些部分视图了。就像我评论的那样,我不喜欢使用字符串比较来选择渲染某个视图。谢谢! - gonzalomelov

3
不是很必要;这是一种完全可行的做法。如果div id总是与model.View的值匹配,你可以将其缩短为以下形式:
<div id="box">
    <div id="@(model.View)">
        ...
    </div>  
    <div id="itemDescription">
        ...
    </div>
</div>

否则,您的方法没问题。根据von v的评论,如果包含的标记冗长(或者需要在多个位置重复逻辑),您可能需要查看部分视图:

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


谢谢!我真正不喜欢的是传递字符串参数并在视图中进行比较。但是我想不出其他更好的解决方案... - gonzalomelov
这是演示逻辑,因此视图就是它所属的地方。这样做完全可以接受,并符合MVC范例。 - Ant P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接