我有一个迭代集合并调用的视图DisplayFor()
对于集合中的每个元素。
我需要手动迭代(而不是将集合传递给 DisplayFor),以便告诉模板是否应该在列表中绘制中断。列表中的项目只有两种类型,按它们排序,因此我只需要显示此中断一次。
我的模板已找到并正确调用。
我可以看到它正确生成的 HTML,即:DisplayFor().ToHtmlString()
我可以将此 HTML 设置为作用域变量,即:var html = DisplayFor().ToHtmlString()
..
但即使Html.Raw(html)
不会在浏览器中呈现它 - HTML 就消失了。
这是怎么回事?
var renderBreakInList = Model.Items.Any(x => x.IsSomeType);
foreach(var item in Model.Items)
{
var renderBreak = renderBreakInList && item.IsOtherType;
Html.DisplayFor(x => item, new { renderBreak = renderBreak });
if (renderBreak)
{
renderBreakInList = false;
}
}
The Html.DisplayFor
方法本身不会向响应呈现任何内容,只是将生成的 HTML 作为MvcHtmlString
.
为了实际将渲染的 HTML 写入响应,您需要使用以下命令将此告诉 Razor@
sign:
@Html.DisplayFor(x => item, new { renderBreak = renderBreak })
所以你的整个代码应该是这样的:
@{
var renderBreakInList = Model.Items.Any(x => x.IsSomeType);
foreach(var item in Model.Items)
{
var renderBreak = renderBreakInList && item.IsOtherType;
@Html.DisplayFor(x => item, new { renderBreak = renderBreak })
if (renderBreak)
{
renderBreakInList = false;
}
}
}
或者您可以使用WebPageBase.Write
方法(当使用时会在后台调用@
sign):
Write(Html.DisplayFor(x => item, new { renderBreak = renderBreak }));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)