【发布时间】: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