[解決済み] Razorの宣言型ビューからMVC HtmlHelperの拡張機能を利用する
質問
MVC 3 RTMプロジェクトのApp_CodeフォルダにRazorのdeclarativeヘルパーを作成しようとしています。
私が遭遇した問題は、ActionLink のような MVC HtmlHelper の拡張が利用できないことでした。これは、コンパイルされたヘルパーが
System.Web.WebPages.HelperPage
に由来するものであり、それは
Html
プロパティを公開していますが、その型は
System.Web.WebPages.HtmlHelper
よりも
System.Web.Mvc.HtmlHelper
.
どのようなエラーが発生したかの例としては
'System.Web.Mvc.HtmlHelper' は 'ActionLink' の定義を含んでいません。 ActionLink' の定義が含まれていません。 および拡張メソッド '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ではこんなに難しいのでしょうか、それとも私が何か間違ったことをしているのでしょうか?
どのように解決するのですか?
を見てみましょう。
Marcind
の回答
をご覧ください。あなたが経験していることは、宣言的なビューを
App_Code
フォルダーに置くことの制限です。
ヘルパーをApp_Codeに置くことは有効です。 しかし、特定の制限事項があります。 ある種のMVCシナリオに影響を与えます(例えば 例: 標準の MVC ヘルパーにアクセスできない Html.ヘルパーにアクセスできない)
関連
-
[解決済み] JsonResultが特殊文字(apostrophe)を \u0027 としてパースしています。
-
[解決済み] ファイルまたはアセンブリ 'System.Web.Mvc' を読み込めませんでした。
-
[解決済み] ASP.NET MVCにおけるApiControllerとControllerの相違点
-
[解決済み】RazorをJavaScriptで使用する場合
-
[解決済み】jQuery Ajaxの呼び出しとHtml.AntiForgeryToken()について)
-
[解決済み】ViewModelのベストプラクティス
-
[解決済み】AutoMapper.CreateMapsをどこに配置するか?
-
[解決済み] セキュリティ透過的なメソッド 'WebMatrix.WebData.PreApplicationStartCode.Start()' による試行。
-
[解決済み] Razor HtmlHelper Extensions (またはビューの他の名前空間) が見つかりません。
-
[解決済み] 型名または名前空間名 'DbContext' が見つかりませんでした [閉鎖]。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】@sectionスクリプトとは何か、何のために使うのか?
-
[解決済み] データベースに 'AspNetRoles' という名前のオブジェクトがすでに存在します。
-
[解決済み] Kendo UI MVC用パスワードテキストボックス
-
[解決済み] asp.net MVCの@RenderSectionとは?
-
[解決済み] System.Web.HttpException (0x80004005)。リクエストの最大長を超えました
-
[解決済み] Razor View throwing "The name 'model' does not exist in the current context".
-
[解決済み] Automapper のタイプマップ構成がない、またはサポートされていないマッピング - エラー
-
[解決済み] ELMAHをASP.NET MVCの[HandleError]属性で動作させる方法は?
-
[解決済み】Html.ActionLinkが"?Length=4 "とレンダリングされるのはなぜか?
-
[解決済み] ASP.NET MVC: UrlHelperを使用するコントローラのユニットテスト