【问题标题】:MVC4 Razor template likeMVC4 Razor 模板,如
【发布时间】:2013-04-30 21:14:42
【问题描述】:

您好,我想有个简单的问题,

我有一个类似的cshtml:

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

我通过模型传递参数以根据参数显示一些内容,因为在两种情况下文档的其余部分都是相同的。

还有其他更好的方法来实现这一点吗?

谢谢!

【问题讨论】:

  • 如果item1item2 中的内容过多,那么您最好将它们放在部分视图上。此外,您可以创建一个 html 帮助器并让它决定显示哪个视图并构建/调用该视图。
  • 您确定要这样做吗?也许它正在工作,但它有点糟糕;p 添加任何东西都会非常痛苦。
  • 是的,我为每个 div 做了一个局部视图,这只是一个简单的例子。如果我创建一个 HtmlHelper,我认为我也必须向它传递一个参数,那么它会比我采用的解决方案有一些优势吗?
  • @gonzalomelov 即使有了它,你也可能会遇到太多逻辑进入视图的情况,如果你也将它与控制器中的逻辑混合,它会很痛苦;->

标签: c# asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

如果这两个div 的内容不多,你的方法很好。否则,创建两个局部视图以帮助保持整洁:

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

【讨论】:

  • +1 如果涉及部分,这是一个如何将数据传递给它们的简洁示例。我会推断这个问题,建议像@HtmlRenderPartial(model.View) 这样简单的东西也可能没问题。
  • 是的,我已经有了一些部分观点。就像我评论的那样,我不喜欢字符串比较来选择呈现一些视图。谢谢!
【解决方案2】:

不是真的;这是一种非常好的做事方式。如果 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

【讨论】:

  • 谢谢!我唯一不喜欢的是传递字符串参数并在视图中进行比较。但是我想不出另一种更好的解决方案..
  • 这是表示逻辑,所以视图是它所属的地方。以这种方式做事是完全可以接受的,并且符合 MVC 范式。
猜你喜欢
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多