如何让MVC3 Html助手返回一个非html编码的字符串?
以下方法:
public static string SelectedIfEqual(this int id, int otherId)
{
if (id == otherId)
return new MvcHtmlString(" selected='selected'").ToString();
return null;
}
返回selected='selected'
而不是selected='selected'
。
我甚至尝试过:
return MvcHtmlString.Create(" selected='selected'").ToHtmlString();
但它返回相同的......: - (
答案 0 :(得分:4)
返回HtmlString
或将结果传递给Html.Raw()
来电
将您的功能更改为:
public static MvcHtmlString SelectedIfEqual(this int id, int otherId)
{
if (id == otherId)
return new MvcHtmlString(" selected='selected'");
return null;
}
如果您不想更改代码,请将扩展名添加到HtmlHelper
:
public static class MyHelper
{
// This doesn't work
//public static Foo Grid(this HtmlHelper helper, string id)
//{
// return new Foo(id).ToString();
//}
// This should work as intended
public static MvcHtmlString Foo(this HtmlHelper helper, Foo theFoo)
{
return theFoo.ToHtmlString();
}
}
在课程Foo
中,ToHtmlString()
方法看起来像
public MvcHtmlString ToHtmlString()
{
return new MvcHtmlString(ToString());
}
然后在视图中你可以使用
@Html.Foo(theFoo)
如果您不想使用Extension Helper,您可以选择:
@Html.Raw(Model.idField.SelectIfEqual(otherId))
希望这有帮助。
答案 1 :(得分:0)
或者,您可以创建一个不编码已添加的HTML属性的帮助程序类。
public class HtmlAttributeNoEncoding : System.Web.Util.HttpEncoder
{
protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output)
{
output.Write(value);
}
}