質問

次のコードで何が欠けているのかわかりません。 (ダミーの)ヘルパー拡張機能を追加するメソッドがあります:

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#でコードを記述すれば問題はありません

マルコ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top