首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mvc视图中的条件逻辑vs htmlhelper vs action

mvc视图中的条件逻辑vs htmlhelper vs action
EN

Stack Overflow用户
提问于 2011-03-17 01:18:43
回答 3查看 3.9K关注 0票数 5

我有一个很大的视图,它需要一些条件逻辑来决定在视图中间呈现几个html块中的哪一个。我在我的模型上有一个属性,它可以有几个不同的值来确定要输出的html。

我通常会将条件逻辑放在一个html helper中,但是考虑到每个输出都是html的一大块,我不确定在c#文件中转义这些内容会不会很好。我也可以把逻辑放在动作中,呈现不同的视图,但考虑到大多数视图都是相同的,这似乎也不是很好。因此,在我的视图中留下了多个if语句(或部分?)这看起来也很丑陋(而且显然是无法测试的)。

做这件事的最好方法是什么?

(我正在使用MVC3,以防有什么新的、时髦的东西我可以使用!)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-17 01:26:56

我通常将单独的视觉块放在它们自己的分词中。然后,我的视图有条件地使用Html.Partial调用每个部分。这使你的主视图不会膨胀。

通常,我尽量避免包含多个元素Html.Helpers。

类似于:

代码语言:javascript
复制
@if(Model.HasA) 
{
    @Html.Partial("widgetdetails-hasa")
}

@if(Model.HasB)
{ 
    @Html.Partial("widgetdetails-hasb")
}
// etc
票数 4
EN

Stack Overflow用户

发布于 2011-03-17 01:20:58

我想这样的逻辑对于视图来说是很好的:

代码语言:javascript
复制
@if (Model.ShouldShowSomeSection)
{
    ... some large chunk of HTML
}
else
{
    ... some alternative
}
票数 4
EN

Stack Overflow用户

发布于 2018-08-07 22:02:05

我同意@bmancini的回答,但我会做一些稍微不同的事情:

我会在逻辑上将这些“几个要呈现的html块”分组到不同的局部视图中:

代码语言:javascript
复制
 _partialViewA.cshtml and _partialViewB.cshtml 

然后,我将使用扩展方法,并将逻辑放在Helpers文件夹中,然后是HTML子文件夹,如下所示:

代码语言:javascript
复制
    using System.Web.Mvc.Html;

    public static class SomeViewHelper
    {
        public static MvcHtmlString OutputHtmlString(this HtmlHelper helper , SomeModel model)
        {
          if(model.HasA)
          {
            return helper.Partial("_partialViewA", model)
          }
          if(model.HasB)
          {
            return helper.Partial("_partialViewB", model)
          }
        }   
    }

这将从视图中删除所有逻辑,该视图现在只有以下代码:

代码语言:javascript
复制
    @Html.OutputHtmlString(Model);

至少这可以消除“丑陋”,避免条件语句,还可以避免“在C#代码中转义html chinks”……当然,我必须在视图中使用@using语句引用Helpers.Html文件夹。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5329101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档