Saya mencoba membuat pembantu deklaratif Razor di folder App_Code saya untuk proyek MVC 3 RTM.
Masalah yang saya hadapi adalah ekstensi MVC HtmlHelper, seperti ActionLink, tidak tersedia. Hal ini karena pembantu yang dikompilasi berasal dari System.Web.WebPages.HelperPage, dan meskipun Htmlproperti mengekspos sebuah properti, tetapi tipenya System.Web.WebPages.HtmlHelperbukan System.Web.Mvc.HtmlHelper.
Contoh dari jenis kesalahan yang saya dapatkan adalah:
'System.Web.Mvc.HtmlHelper' tidak berisi definisi untuk 'ActionLink' dan tidak ada metode ekstensi 'ActionLink' yang menerima argumen pertama jenis 'System.Web.Mvc.HtmlHelper' dapat ditemukan (apakah Anda kehilangan petunjuk penggunaan atau referensi perakitan?)
Satu-satunya solusi saya adalah membuat HelperPage saya sendiri dan mengganti properti 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; }
}
}
Saya kemudian harus menulis yang berikut ini di bagian atas setiap helper:
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@helper DoSomething()
{
@Html.ActionLink("Index", "Home")
}
Apakah itu dimaksudkan untuk sekeras ini di MVC 3, atau apakah saya melakukan sesuatu yang salah?