我想写我自己的小HTML助手,其行为很像0,但不会遭受我以前遇到过相同的problems。我们不要讨论DropDownListFor
是否存在缺陷—这不是这个问题的含义。ASP.NET MVC:为什么`ToMvcHtmlString`不公开?
不管怎么说,MVC的家伙是什么原因使ToMvcHtmlString
内部和不公开?
我想写我自己的小HTML助手,其行为很像0,但不会遭受我以前遇到过相同的problems。我们不要讨论DropDownListFor
是否存在缺陷—这不是这个问题的含义。ASP.NET MVC:为什么`ToMvcHtmlString`不公开?
不管怎么说,MVC的家伙是什么原因使ToMvcHtmlString
内部和不公开?
我的猜测是鼓励您使用System.Web.HtmlString来代替。但是,是的,我自己也想过这个,我在自己的帮手里写了一个重复的ToMvcHtmlString扩展。
MvcHtmlString是,IIRC,只是它们的兼容性修补程序,所以MVC 2可以在.NET 3.5和4上工作 - 但即使如此,在您自己的代码中使用它也是有用的。
这是否解决您的问题?
public static MvcHtmlString SuperDenizControl(this HtmlHelper html)
{
var builder = new TagBuilder("select");
//blah blah blah amazing control
var control = builder.ToString();
return MvcHtmlString.Create(control);
}
我想我会发布一个简单的解决方法,为那些可能正在寻找一个和偶然发现这个问题。
虽然ToMvcHtmlString是内在的,这是很容易绕过,因为它使用的公共方法:
从MVC来源:
internal MvcHtmlString ToMvcHtmlString(TagRenderMode renderMode) {
return MvcHtmlString.Create(ToString(renderMode));
}
两个MvcHtmlString.Create和TagBuilder.ToString是公众如此只需更换
return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);
与
return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
你很好走!对我很好。不知道为什么他们甚至不屑于制定一个单独的内部方法。
这不是问题,我只是想知道为什么。顺便说一句,酷方法的名字! :) – 2010-07-28 13:14:30