通常のasp.net開発サーバーでvs2010 win7 x64 MVC 3を使用しています。Firefox、IE9、Chrome の最新バージョン。
私は強く型付けされたビューを持っており、 Arjan Einbu が mvc 3 に提供したこのコードasp-net-mvc-ajax-actionlink-with-imageのわずかに変更されたバージョンを介して機能する ajax 拡張メソッドを取得しようとしています。
これは、mvc Web サイトの App_Code フォルダーにある Helper.cs ファイルにある拡張メソッド コードです。
public static class HelperExtensions
{
public static IHtmlString ImageActionLink(this AjaxHelper helper, string imageUrl, string titleText, string actionName, object routeValues, AjaxOptions ajaxOptions)
{
var builder = new TagBuilder("img");
builder.MergeAttribute("src", imageUrl);
builder.MergeAttribute("title", titleText);
var link = helper.ActionLink("[replaceme]", actionName, routeValues, ajaxOptions).ToHtmlString();
return new MvcHtmlString(link.Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing)));
}
}
私の見解@model IEnumerable<Models.SpeciesType>
では、モデルを定義する上部にあり、使用しています...
@Ajax.ImageActionLink(Url.Content("~/Content/ThumbUp.png"), "Valid/Appropriate", "VoteUp", new {id = item.ID}, new AjaxOptions { HttpMethod = "POST" } );
画像付きの ajax アクション リンクを挿入して、ユーザーがアイテムに投票できるようにします。上記のコードは機能せず、何をしても無限のエラーが発生し続けます。それが私に与えている現在のエラーは...
コンパイラ エラー メッセージ: CS0121: 次のメソッドまたはプロパティの間で呼び出しが曖昧です: 'HelperExtensions.ImageActionLink(System.Web.Mvc.AjaxHelper, string, string, string, object, System.Web.Mvc.Ajax.AjaxOptions)' 「HelperExtensions.ImageActionLink(System.Web.Mvc.AjaxHelper、文字列、文字列、文字列、オブジェクト、System.Web.Mvc.Ajax.AjaxOptions)」
つまり、競合している同じ名前空間に同じ名前と署名を持つ 2 つのメソッドがあります。1 つのコード ファイルで 1 回しか定義していないため、これも不可能です。キャッシュの問題があるのではないかと思ったので、Firefox で ctrl+shift+delete を実行し、キャッシュ、履歴、その他すべてを完全にクリアしました。ページを更新すると、同じエラーが発生します。また、IE9 と chrome で同じ問題をテストしました。
asp.net開発サーバーを停止して開始し、ビジュアルスタジオを終了して、同じ問題を再起動しました。
ディスククリーンアップですべてをチェックして実行しましたか。ディスク クリーンアップでは、「C:\Users\Dean\AppData\Local\Temp」内のすべてのファイルが削除されなかったので、「Temporary ASP.NET Files」フォルダーを含めることができるフォルダー内の残りのファイルをすべて手動で削除しました。次に、vs2010 を再度実行し、Web サイトを実行しました。繰り返しますが、同じエラー「CS0121:呼び出しは次のメソッド間であいまいです...などなど」
私が何をしても、このエラーを取り除くことはできません。これは私が得た唯一のエラーではありませんでした。このエラーが持続し始める前に、mvc が正しい署名を持つ ImageActionLink メソッドを見つけることができないことに関連するエラーも取得していました。
ImageActionLink(this AjaxHelper<IEnumerable<SpeciesType>> helper, etc etc
そのエラーは、強く型付けされたビューを使用しているという事実に関連していると思います。
そのため、「呼び出しがあいまいです」というエラーを取り除くために、ImageActionLink メソッド全体をコメントアウトし、再コンパイルして Web サイトを再度実行しました。このエラーが発生しました
コンパイラ エラー メッセージ: CS1061: 'System.Web.Mvc.AjaxHelper>' には 'ImageActionLink' の定義が含まれておらず、タイプ 'System.Web.Mvc.AjaxHelper>' の最初の引数を受け入れる拡張メソッド 'ImageActionLink' がありません見つかりました (using ディレクティブまたはアセンブリ参照がありませんか?)
ImageActionLink が存在しなくなったため、このエラーは完全に理にかなっています。次に、ImageActionLink メソッドのコメントを外して、Web サイトを再コンパイルし、再度実行しました。確かに、同じ「呼び出しがあいまいです」というエラーが表示されます。
私は途方に暮れています。さまざまなキャッシュをクリアしてそれを除外し、コードの一部をコメント化およびコメントアウト解除し、どの部分が壊れているかをテストするために、考えられるすべてのことを行いました。しかし、「呼び出しがあいまいです」というエラーを渡すことができずに行き詰まっています。
この「呼び出しがあいまいです」というエラーを修正する方法を知っている人がいるので、単純な ajax 拡張メソッドが機能していないように見える理由を尋ねることができますか?
「呼び出しがあいまいです」というエラーを取り除きました。ここにあるasp-net-mvc-ajax-actionlink-with-imageの Arjan Einbu の mvc 3 バージョンのコードをコピーしました。
次に、Visual Studio の App_Code フォルダーに新しいクラスを作成し、ctrl+a ctrl+v を実行して、事前に生成されたすべてのクラス テンプレート コードを HelperExtensions クラスだけに置き換えました。問題は、ウェブサイトの名前空間と一致する名前空間で HelperExtensions をラップしなかったことです。
asp.net が名前空間なしでコード ファイルをコンパイルする方法についての何かが、それを台無しにしていました。おそらく、ビルド時にコードがメイン Web サイトの dll でコンパイルされ、asp.net が実行されると、app_code フォルダーで見つかったコード ファイルがコンパイルされるため、同じ名前と同じメソッド名またはいくつかの 2 つのクラスがあるためだと思います。そのような。
とにかく、その悪化を解決したので、ウェブサイトを実行すると、次のエラーが発生します...
Compiler Error Message: CS1061: 'System.Web.Mvc.AjaxHelper<IEnumerable<Models.SpeciesType>>' does not contain a definition for 'ImageActionLink' and no extension method 'ImageActionLink' accepting a first argument of type 'System.Web.Mvc.AjaxHelper<IEnumerable<Models.SpeciesType>>' could be found (are you missing a using directive or an assembly reference?)
エラーは、ImageActionLink メソッドを見つけているかのように表示されますが、ImageActionLink メソッドの最初のパラメーターは型ではありませんAjaxHelper<IEnumerable<Models.SpeciesType>>
エラーはあまり意味がありません。はい、ImageActionLink メソッドの最初のパラメーターは AjaxHelper 型ですが、一般的な AjaxHelper 型ではありません。そこで、ImageActionLink メソッドの宣言を次のように変更しようとしました
public static IHtmlString ImageActionLink(this AjaxHelper<IEnumerable<SpeciesType>> helper, string imageUrl, string titleText, string actionName, object routeValues, AjaxOptions ajaxOptions)
しかし、私はまだ同じエラーが発生します。ImageActionLink の最初のパラメーターは AjaxHelper 型ですが、「この AjaxHelper ヘルパー」と定義されています。これは、AjaxHelper クラスを拡張する拡張メソッドであることを意味します。
index.cshtml ファイルの先頭にある は本当に必要ない@model IEnumerable<Models.SpeciesType>
ので、それを削除して、今回だけ同じエラーでアプリを再度実行しようとしました
Compiler Error Message: CS1061: 'System.Web.Mvc.AjaxHelper<dynamic>' does not contain a definition for 'ImageActionLink' and no extension method 'ImageActionLink' accepting a first argument of type 'System.Web.Mvc.AjaxHelper<dynamic>' could be found (are you missing a using directive or an assembly reference?)
このエラーが発生する理由を知っている人はいますか? そして、それを修正する方法は?