我有一个很大的视图,它需要一些条件逻辑来决定在视图中间呈现几个html块中的哪一个。我在我的模型上有一个属性,它可以有几个不同的值来确定要输出的html。
我通常会将条件逻辑放在一个html helper中,但是考虑到每个输出都是html的一大块,我不确定在c#文件中转义这些内容会不会很好。我也可以把逻辑放在动作中,呈现不同的视图,但考虑到大多数视图都是相同的,这似乎也不是很好。因此,在我的视图中留下了多个if语句(或部分?)这看起来也很丑陋(而且显然是无法测试的)。
做这件事的最好方法是什么?
(我正在使用MVC3,以防有什么新的、时髦的东西我可以使用!)
发布于 2011-03-17 01:26:56
我通常将单独的视觉块放在它们自己的分词中。然后,我的视图有条件地使用Html.Partial调用每个部分。这使你的主视图不会膨胀。
通常,我尽量避免包含多个元素Html.Helpers。
类似于:
@if(Model.HasA)
{
@Html.Partial("widgetdetails-hasa")
}
@if(Model.HasB)
{
@Html.Partial("widgetdetails-hasb")
}
// etc发布于 2011-03-17 01:20:58
我想这样的逻辑对于视图来说是很好的:
@if (Model.ShouldShowSomeSection)
{
... some large chunk of HTML
}
else
{
... some alternative
}发布于 2018-08-07 22:02:05
我同意@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#代码中转义html chinks”……当然,我必须在视图中使用@using语句引用Helpers.Html文件夹。
https://stackoverflow.com/questions/5329101
复制相似问题