2012-12-21 76 views
1

在asp.net mvc 3中,默認的html幫手來自System.Web.Mvc.Html。我想使用System.Web.WebPages.Html的幫手。儘量嘗試,我似乎無法獲得實例或訪問System.Web.WebPages.Html。這是我曾嘗試過的:如何實例化Web.Webpages.Html.HtmlHelper?

我在內置剃鬚刀的情況下嘗試了所有這一切,因爲我不認爲它會變得複雜(哈哈)。

這與版本

<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的實例?

+1

的是什麼?也許還有其他方法可以讓你獲得什麼?它是一個特定的功能嗎? –

+0

@SimonWhitehead - 它有很多功能。如果您查看這兩個類的文檔,則「Web.Mvc」中不存在任何驗證,此外,還存在許多函數中不存在的重載。一個非常簡單的例子就是'Html.Label'幫手,其中'Mvc'只有2個重載,而網頁有3個。這比這個更深,因爲我認爲這個差異導致驗證無法正確設置各種情況。 –

+1

也許我誤解了你,但MVC Helper具有相同的..如果不是更多(感謝'LabelExtensions')重載。另外,在** MVC Helper中有**驗證例程。您能舉出一個您想要實現的具體示例嗎?我只是沒有看到推理.. –

回答