该文件对于MvcHtmlString是不是非常有启发性:
表示不应再次编码的HTML编码字符串.
我不清楚这究竟是什么意思.似乎有些HTML帮助器方法会返回一个MvcHtmlString,但我在网上看到的几个自定义帮助程序的例子只返回一个常规字符串.
问题:
什么是MvcHtmlString?
我什么时候应该选择MvcHtmlString超过string反之亦然?为什么?
首先,我使用带有Razor视图引擎的MVC 3 RC1.我有一个HTML帮助扩展,如下所示:
public static string TabbedMenuItem(this HtmlHelper htmlHelper, string text, string actionName, string controllerName) {
StringBuilder builder = new StringBuilder();
builder.Append("<li>");
builder.Append(text);
builder.Append("</li>");
return builder.ToString();
}
Run Code Online (Sandbox Code Playgroud)
在视图上它被称为这样:
@Html.TabbedMenuItem("Home", "Index", "Home")
Run Code Online (Sandbox Code Playgroud)
我得到的问题是MVC自动对视图中的结果进行HTML编码,所以我得到的是字符串的编码版本:
<li>Home</li>
Run Code Online (Sandbox Code Playgroud)
有谁知道如何禁用HTML帮助扩展的自动编码?
在此先感谢安迪
我在视图中显示一些文字:
....
<%: model.Content %>
....
Run Code Online (Sandbox Code Playgroud)
我的model.Content包含html标签,我希望不将它们显示为文本,而是显示为html.怎么做?
谢谢.
假设我的模型中有一个函数,它生成一个基于int的样式标记
public string GetStyle(int? size){
if(size > 99)
return "style=\"margin: 20px;\"";
else
return "";
}
Run Code Online (Sandbox Code Playgroud)
如果我使用它来渲染它
<li @GetStyle(123)>123</li>
Run Code Online (Sandbox Code Playgroud)
它输出这个:
<li style=""margin:20px;"">123</li>
Run Code Online (Sandbox Code Playgroud)
(注意双引号).如果我将函数中的转义双引号更改为单引号,则输出:
<li style="'margin:20px;'">123</li>
Run Code Online (Sandbox Code Playgroud)
两者都不正确,如果不需要样式,我不得不输出空样式标记.
最近一位同事检查了变更集,其中表单<%=(...)%>上的大量表达式被更改为<%:(...)%>.
我有一个模糊的回忆,听到了什么<%:做了,但不记得了.打电话给我的同事已经太晚了,Google和Bing似乎都无法搜索字符串"<%:".
有人可以开导我吗?