【问题标题】:How can I instantiate Web.Webpages.Html.HtmlHelper?如何实例化 Web.Webpages.Html.HtmlHelper?
【发布时间】:2012-12-21 01:20:16
【问题描述】:

在 asp.net mvc 3 中,默认的 html 帮助程序来自 System.Web.Mvc.Html。我想使用来自System.Web.WebPages.Html 的助手。尽我所能,我似乎无法获得实例或访问System.Web.WebPages.Html。这是我尝试过的:

我在 razor inlined 中尝试了所有这些,因为我认为它不会那么复杂(哈哈)。

这是版本

<add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

使用新的

首先我尝试简单地实例化它:

@{ var h = new System.Web.WebPages.Html.HtmlHelper(); }

这似乎有效,直到我运行它并得到这个:

Compiler Error Message: CS0143: 
The type 'System.Web.WebPages.Html.HtmlHelper' has no constructors defined

使用反射

所以我认为它是一个抽象类并试图继承它。不,它是一个实际的类,只是带有一个私有构造函数。所以我试图反映它

@using System.Reflection
@{
 BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public;
 System.Globalization.CultureInfo ci = null;
 var instance = (System.Web.WebPages.Html.HtmlHelper)Activator.CreateInstance(
    typeof(System.Web.WebPages.Html.HtmlHelper), 
    flags,
    null, 
    new object[] { ViewData.ModelState },
    ci
    );
}

导致此错误的原因:

Exception Details: System.MissingMethodException: 
Constructor on type 'System.Web.WebPages.Html.HtmlHelper' not found.

希望直接访问

然后我试图寻找一个有效的版本:

var h = System.Web.WebPages.HelperPage.Html;

导致此错误的原因(h 为空)

Object reference not set to an instance of an object.

我尝试了这些的其他版本,但也没有成功,并且对如何获取此类的实例感到茫然。我可以访问@Html,但正如我所说,HtmlHelper 不适用于这种情况。

如何获得System.Web.WebPages.Html的实例??

【问题讨论】:

  • 有什么用?也许还有其他方法可以得到你想要的东西?它是一个特定的功能吗?
  • @SimonWhitehead - 它有很多功能。如果您查看这两个类的文档,Web.Mvc 中没有验证,此外,还有许多函数中不存在的重载。一个非常简单的例子是 Html.Label 帮助器,其中 Mvc 只有 2 个重载,而网页有 3 个。但这比这更深,因为我相信这种差异会导致验证在各种情况下无法正确设置.
  • 也许我误解了你,但 MVC Helper 具有相同的 .. 如果不是更多(感谢 LabelExtensions)重载。此外,MVC Helper 中有 验证例程。你能举一个具体的例子来说明你想要实现的目标吗?我只是没有看到推理..
  • @SimonWhitehead - 无意冒犯,但您在此处的评论重复了您所说的内容,因此我将引导您阅读我的回复。但是,您对 mvc 帮助程序不正确,正如我指出的那样(阅读文档),该类的内容较少。你还需要知道什么?我正在尝试实例化一个替代 Html 助手。
  • 这个问题不是关于如何使用Mvc的html helper。如果您阅读了文档,那么您就会知道无法将Html.Label("lbl","txt", new { @class = "attribute" });Mvc 助手一起使用(这很简单)。一个更复杂的示例是使用 DropDownFor 帮助器用于具有 required 数据属性的嵌套类(失败)。为什么要进入所有的侧面细节?我觉得你在拖钓,并且会用 why 回应一切。重要的是如何如何实例化 WebPages.Html.HtmlHelper

标签: c# asp.net-mvc-3 razor html-helper


【解决方案1】:

System.Web.WebPages.Html 是命名空间而不是类,您不能实例化命名空间。

http://msdn.microsoft.com/en-us/library/system.web.webpages.html(v=vs.111).aspx

我想你想要 System.Web.WebPages.Html.HtmlHelper

【讨论】:

  • 是的,您会注意到大多数示例都指向实例化HtmlHelper。我相信您误读了帖子底部的评论,并没有真正研究实际问题。
猜你喜欢
  • 1970-01-01
  • 2016-02-07
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多