ASP.NET MVC:为什么“ToMvcHtmlString”不公开?

发布于 2024-09-11 23:34:31 字数 315 浏览 26 评论 0原文

我正在尝试编写自己的小 HTML 帮助器,其行为很像 DropDownListFor 但不会遭受相同的 我以前遇到过的问题。我们先不讨论 DropDownListFor 是否有缺陷——这不是这个问题的目的。

无论如何,MVC 人员将 ToMvcHtmlString 设为内部而不是公开的原因是什么?

I'm trying to write my own little HTML helper which acts a lot like DropDownListFor but which doesn't suffer from the same problems that I've encountered before. Let's not discuss whether or not DropDownListFor is flawed—that is not what this question is about.

Anyways, what is the reason that the MVC guys make ToMvcHtmlString internal and not public?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

維他命╮ 2024-09-18 23:34:31

我想我应该为那些可能正在寻找解决方法并偶然发现这个问题的人发布一个简单的解决方法。

虽然 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));

即可!对我来说效果很好。不知道为什么他们甚至费心去制作一个单独的内部方法。

I thought I'd post an easy workaround for those that might be looking for one and stumble upon this question.

While ToMvcHtmlString is internal, it is pretty easy to bypass as it uses public methods:

From the MVC source:

internal MvcHtmlString ToMvcHtmlString(TagRenderMode renderMode) {
    return MvcHtmlString.Create(ToString(renderMode));
}

Both MvcHtmlString.Create and TagBuilder.ToString are public so just replace

return tagBuilder.ToMvcHtmlString(TagRenderMode.Normal);

with

return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));

and you are good to go! Works great for me. Not sure why they even bothered to make a separate internal method.

带刺的爱情 2024-09-18 23:34:31

我的猜测是鼓励您使用 System.Web.HtmlString 相反。但是,是的,我自己也想知道这一点,并且我在自己的助手中编写了一个重复的 ToMvcHtmlString 扩展。

MvcHtmlString 是,IIRC,只是它们的兼容性修复,因此 MVC 2 可以在 .NET 3.5 和 4 上工作 - 但即便如此,在您自己的代码中使用它也会很有用。

My guess is to encourage you to use System.Web.HtmlString instead. But yes, I've wondered this myself and I've written a duplicate ToMvcHtmlString extension in my own helpers.

MvcHtmlString is, IIRC, just their compatibility fix so MVC 2 can work on both .NET 3.5 and 4 - but even then it'd be useful to use in your own code for that.

望笑 2024-09-18 23:34:31

这能解决您的问题吗?

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);
}

Does this solve your problem?

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文