Bir MVC 3 RTM projesi için App_Code klasörümde Razor bildirim temelli bir yardımcısı oluşturmaya çalışıyordum.
Karşılaştığım sorun, ActionLink gibi MVC HtmlHelper uzantılarının mevcut olmamasıydı. Bunun nedeni, derlenen yardımcıların System.Web.WebPages.HelperPage
bir Html
özellikten türetilmesi ve bir özelliği ifşa etmesine rağmen , türünün System.Web.WebPages.HtmlHelper
değil türünün olmasıdır System.Web.Mvc.HtmlHelper
.
Aldığım hata türüne bir örnek:
'System.Web.Mvc.HtmlHelper', 'ActionLink' için bir tanım içermiyor ve 'System.Web.Mvc.HtmlHelper' türünde ilk bağımsız değişkeni kabul eden 'ActionLink' uzantı yöntemi bulunamadı (bir kullanma yönergesi eksik mi? veya bir montaj referansı?)
Tek çözümüm, kendi HelperPage'imi oluşturmak ve Html özelliğini geçersiz kılmaktı:
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; }
}
}
Daha sonra her yardımcının başına şunu yazmam gerekiyor:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
MVC 3'te bu kadar zor mu yoksa yanlış bir şey mi yapıyorum?