Asp.net mvc mvc视图中的条件逻辑vs htmlhelper vs action 我有一个大视图,需要一些条件逻辑来决定在视图中间渲染哪些HTML块。我的模型上有一个属性,它可以有几个不同的值,这些值决定要输出的html
我通常会将条件逻辑放在html助手中,但考虑到每个输出都是一个相当大的html块,我不确定在c#文件中转义这些逻辑是否很好。我也可以把逻辑放在行动中,提出不同的观点,但鉴于大多数观点是相同的,这似乎也不太好。因此,在我看来,我留下了多个if语句(或部分?),它们看起来也很丑陋(显然是不稳定的) 这样做的最佳方式是什么Asp.net mvc mvc视图中的条件逻辑vs htmlhelper vs action 我有一个大视图,需要一些条件逻辑来决定在视图中间渲染哪些HTML块。我的模型上有一个属性,它可以有几个不同的值,这些值决定要输出的html,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我通常会将条件逻辑放在html助手中,但考虑到每个输出都是一个相当大的html块,我不确定在c#文件中转义这些逻辑是否很好。我也可以把逻辑放在行动中,提出不同的观点,但鉴于大多数观点是相同的,这似乎也不太好。因此,在我看来,我留下了多个if语句(或部分?),它们看起来也很丑陋(显然是不稳定的) 这样做的最佳方式是什么 (我正在使用MVC3,以防我可以使用一些新的和时髦的东西!)这样的逻辑对于视图来说很好: @if (Model.ShouldShowSomeSection) { ... s
(我正在使用MVC3,以防我可以使用一些新的和时髦的东西!)这样的逻辑对于视图来说很好:
@if (Model.ShouldShowSomeSection)
{
... some large chunk of HTML
}
else
{
... some alternative
}
我通常在它们自己的部分中放置单独的视觉块。然后,我的视图有条件地使用Html.partial调用每个部分。这可以防止主视图膨胀 一般来说,我尽量避免使用包含多个元素的Html.Helpers 比如:
@if(Model.HasA)
{
@Html.Partial("widgetdetails-hasa")
}
@if(Model.HasB)
{
@Html.Partial("widgetdetails-hasb")
}
// etc
我同意@bmancini的答案,但以下是我要做的稍微不同的事情: 我会将这些“要呈现的几个html块”逻辑地分组到不同的局部视图中:
_partialViewA.cshtml and _partialViewB.cshtml
然后,我将使用扩展方法,并将我的逻辑放在Helpers文件夹中,然后放在Html子文件夹中,如下所示:
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)
}
}
}
这将从视图中删除所有逻辑,该视图现在只有以下代码:
@Html.OutputHtmlString(Model);
至少这样可以消除“丑陋”和避免条件语句,还可以避免“在C#code中逃避html漏洞”。。。
当然,我必须在视图中使用@using语句引用Helpers.Html文件夹。如果您使用的是Razor,请尝试通过谷歌搜索“Razor声明性Html Helpers”,它们可能适合您的情况。。。他们可能不会。但是他们的新的和时髦的;-)我同意-包含多个元素的Html助手称为部分页面;-)