gpt4 book ai didi

asp.net-mvc-4 - 调用了 MVC4 Razor DisplayTemplate,生成了 HTML,但未呈现给浏览器

转载 作者:行者123 更新时间:2023-12-04 02:52:28 26 4
gpt4 key购买 nike

我有一个 View 迭代一个集合并为集合中的每个元素调用 DisplayFor()

我需要手动迭代(而不是将集合传递给 DisplayFor)以便告诉模板是否应该绘制列表中的中断。列表中的项目只有 2 种类型,按它们排序,所以我只需要显示一次中断。

我的模板已找到并正确调用。
我可以看到它正确生成的 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;
}
}

最佳答案

Html.DisplayFor 方法本身不会向响应呈现任何内容,只是将生成的 HTML 作为 MvcHtmlString 返回。

为了将呈现的 HTML 实际写入响应,您需要使用 @ 符号告诉 Razor:

@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 方法(使用 @ 符号时会在后台调用):

Write(Html.DisplayFor(x => item, new { renderBreak = renderBreak }));

关于asp.net-mvc-4 - 调用了 MVC4 Razor DisplayTemplate,生成了 HTML,但未呈现给浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17412113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com