我想寫我自己的小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