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 Html
properti mengekspos sebuah properti, tetapi tipenya System.Web.WebPages.HtmlHelper
bukan 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?