【问题标题】:ASP.NET MVC: Why is `ToMvcHtmlString` not public?ASP.NET MVC:为什么 `To MvcHtmlString` 不公开?
【发布时间】:2010-07-28 12:52:59
【问题描述】:

我正在尝试编写我自己的小 HTML 帮助程序,它的行为很像 DropDownListFor,但它不会受到我以前遇到的 problems 的影响。我们不要讨论DropDownListFor 是否有缺陷——这不是这个问题的目的。

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

【问题讨论】:

    标签: c# asp.net-mvc extension-methods html-helper


    【解决方案1】:

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

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

    你可以走了!对我很有用。不知道他们为什么还要费心制作一个单独的内部方法。

    【讨论】:

    • 如此古老但奇怪的是仍然具有相关性。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这能解决您的问题吗?

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

      【讨论】:

      • 这不是问题,我只是想知道为什么。顺便说一句,很酷的方法名称! :)
      猜你喜欢
      • 1970-01-01
      • 2011-01-04
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多