【发布时间】:2014-08-27 20:02:59
【问题描述】:
我正在开发一个使用 mvc 和 razor 返回 xml 的 Restful 应用程序(让我们直接跳过这是一个坏主意)
我在部分视图中有一个 foreach,它根据项目生成 xml 节点:
@foreach (var item in Model)
{
@Html.RenderElement(item.Type.ToString(), item.Value)
}
渲染元素助手:
public static string RenderElement(this HtmlHelper helper, string elementName, object elementValue)
{
return string.Format("<{0}>{1}</{0}>", elementName, helper.Encode(elementValue));
}
我发现每个循环都有两个问题
- 所有项目都放在输出中的同一行
- RenderElement 的输出正在被 html 编码
对于第一个问题,是否存在强制剃须刀呈现新行的公认方法?
让我重申一下,我不会用这把剃须刀输出 html。所以<br>标签不是一个选项。
我可以通过将 RenderElement 调用包装在对 @Html.Raw() 的调用中来解决第二个问题,但这感觉很混乱,所以理想情况下,我想了解为什么首先要对其进行编码以及是否存在防止这种情况发生的更清洁的方法。
【问题讨论】:
-
如果我不得不像你那样做坏事(我知道你知道),我可能会使用
DisplayFor和自定义模板。 -
@cheesemacfly 不是一个坏主意,但添加显示模板只会使本已极其复杂的应用程序更加复杂。所以我宁愿在某个地方的 Environment.Newline 中使用
@Html.Raw和蛮力。 -
好吧,它添加了一个元素,但至少显示的一半不是在方法内部生成,而是在部分视图中生成,因此可以轻松更改。话虽如此,如果您选择使用扩展方法,我认为
@Html.Raw()是您唯一的选择。
标签: asp.net-mvc razor