MVC 3 RTMプロジェクトのApp_CodeフォルダーにRazor宣言型ヘルパーを作成しようとしました。
私が遭遇した問題は、ActionLinkのようなMVC HtmlHelper拡張機能が利用できないことでした。これは、コンパイルされたヘルパーがから派生しているためSystem.Web.WebPages.HelperPage
であり、それはHtml
プロパティでSystem.Web.WebPages.HtmlHelper
はなく、タイプのプロパティを公開していますSystem.Web.Mvc.HtmlHelper
。
私が得ていた種類のエラーの例は次のとおりです:
「System.Web.Mvc.HtmlHelper」には「ActionLink」の定義が含まれておらず、「System.Web.Mvc.HtmlHelper」タイプの最初の引数を受け入れる拡張メソッド「ActionLink」が見つかりませんでした(usingディレクティブがありません)またはアセンブリ参照?)
私の唯一の解決策は、独自の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でこれが難しいことを意味しているのですか、それとも何か間違っているのですか?