VB MVCアプリでHtmlHelperメソッドを作成できません
-
06-07-2019 - |
質問
次のコードで何が欠けているのかわかりません。 (ダミーの)ヘルパー拡張機能を追加するメソッドがあります:
Imports System.Runtime.CompilerServices
Namespace HtmlHelpers
Public Module HelpExtensions
<Extension()> _
Public Function HelpMe(ByVal HtmlHelper As HtmlHelper) As String
Return "<a>HELP</a>"
End Function
End Module
End Namespace
私のビューは次のようになります:
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="HtmlHelpers" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="body" runat="server">
<%=Html.HelpMe()%>
</asp:Content>
しかし、これは私に次のエラーを与えます:
'HelpMe' is not a member of 'System.Web.Mvc.HtmlHelper'.
何が間違っているのですか?
解決
名前空間のインポートディレクティブがトリックを実行しなかった理由がわかりませんが、私は追加しました
<add namespace="MyProject.HtmlHelpers"/>
をweb.configの<namespaces>
セクションに移動すると、現在機能しています。もしかしたら
<%@ Import Namespace="MyProject.HtmlHelpers" %>
同様に機能しますか?
他のヒント
拡張メソッドを使用する前にソリューションを再構築しようとしましたか?コンパイラが拡張メソッドの存在を取得するために、VB.NETでそれをしなければなりませんでした。
解決策を見つけたと思います。
ヘルパーのモジュールは App_Code ディレクトリに配置する必要があります。
gfrizzleが言ったように、Viewsフォルダーのweb.configに名前空間参照を追加すると、ページが適切に表示されます。ただし、IntelliSenseを正常に動作させるには、クライアントを再起動する必要がありました。また、拡張モジュールを使用してファイルに既にグローバルにインポートされた名前空間のImport
ステートメントを明示的に追加する必要がありました。
たとえば、System.Web.Mvc.HtmlHelper
を拡張する場合、行を追加する必要がありました
Imports System.Web.Mvc
アプリケーションが正しくコンパイルされ、プロジェクト参照タブで名前空間がチェックされているにもかかわらず、エラーなしでページを表示するため。
問題は、MVC2とMVC3の両方がインストールされていることです。 その場合、VB.NET Visual StudioでHTMLHelperカスタムを記述すると、広告エラー<!> quot; YourClass <!> quot;がスローされます。 「System.Web.Mvc.HtmlHelper」のメンバーではありません。
ただし、ページを実行すると正常に動作します。
これは解決策です: http://forums.asp.net/t/1694828.aspx/1
ソリューション1)プロジェクトをMVC3にアップグレードします 解決策2)MVC3をアンインストールする 解決策3).NET frameworkを4.0ではなく3.5に変更(MVC3を無効化) 解決策4)C#でコードを記述すれば問題はありません
マルコ