Я намагався створити декларативний помічник Razor у своїй папці App_Code для проекту MVC 3 RTM.
Проблема, з якою я зіткнувся, полягала в тому, що розширення MVC HtmlHelper, як і ActionLink, недоступні. Це пояснюється тим, що складені помічники походять від System.Web.WebPages.HelperPage
, і хоч це викриває Html
властивості, System.Web.WebPages.HtmlHelper
а не типу System.Web.Mvc.HtmlHelper
.
Приклад помилки, яку я отримував:
'System.Web.Mvc.HtmlHelper' не містить визначення для 'ActionLink', і жодного методу розширення 'ActionLink', що приймає перший аргумент типу 'System.Web.Mvc.HtmlHelper', не вдалося знайти (ви не пропускаєте використання директиви або посилання на збірку?)
Моє єдине рішення - створити власну HelperPage та змінити властивість Html:
using System.Web.WebPages;
public class HelperPage : System.Web.WebPages.HelperPage
{
// Workaround - exposes the MVC HtmlHelper instead of the normal helper
public static new HtmlHelper Html
{
get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
}
}
Тоді я повинен написати наступне у верхній частині кожного помічника:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Чи означає це бути таким важким у MVC 3, чи я щось роблю не так?