Я использую vs2010 win7 x64 MVC 3 с обычным сервером разработки asp.net. И новейшие версии Firefox, IE9 и Chrome.
У меня строго типизированное представление, и я пытаюсь заставить метод расширения ajax работать через слегка измененную версию этого кода asp-net-mvc-ajax-actionlink-with-image , который Арджан Einbu предоставил для mvc 3.
Вот мой код метода расширения, расположенный в файле Helper.cs в папке App_Code моего веб-сайта mvc.
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: The
вызов неоднозначен между
следующие методы или свойства:
«HelperExtensions.ImageActionLink (System.Web.Mvc.AjaxHelper,
строка, строка, строка, объект,
System.Web.Mvc.Ajax.AjaxOptions) 'и
«HelperExtensions.ImageActionLink (System.Web.Mvc.AjaxHelper,
строка, строка, строка, объект,
System.Web.Mvc.Ajax.AjaxOptions) '
Это означает, что у меня есть два метода с одинаковым именем и сигнатурой в одном и том же пространстве имен, которые конфликтуют, опять же невозможно, потому что я определил его только один раз в одном кодовом файле. Поэтому я подумал, что может возникнуть проблема с кэшированием, поэтому я сделал Ctrl + Shift + Delete в Firefox и полностью очистил кеш, историю и все остальное. Обновил страницу и я получил ту же ошибку. Я также проверил это в IE9 и Chrome та же проблема.
Я остановился и запустил сервер разработки asp.net, вышел из Visual Studio и перезапустил все ту же проблему.
Очистил ли диск, проверил все и запустил. Очистка диска не удалила все файлы в «C: \ Users \ Dean \ AppData \ Local \ Temp», поэтому я вручную удалил все оставшиеся файлы в папке, которые я мог, включая папку «Temporary ASP.NET Files». Затем я снова запустил vs2010 и запустил сайт. Снова все та же ошибка "CS0121: вызов неоднозначен между следующими методами ... и т. Д. И т. П."
Я не могу избавиться от этой ошибки, что бы я ни делал. Это была не единственная ошибка, которую я получал. До того, как эта ошибка начала повторяться, я также получал ошибки, связанные с тем, что mvc не может найти метод ImageActionLink с правильной сигнатурой, а именно
ImageActionLink(this AjaxHelper<IEnumerable<SpeciesType>> helper, etc etc
Я предполагаю, что эта ошибка связана с тем, что я использую строго типизированное представление.
Итак, чтобы попытаться избавиться от ошибки «вызов неоднозначен», я закомментировал весь метод ImageActionLink, перекомпилировал и снова запустил веб-сайт. Я получил эту ошибку
Сообщение об ошибке компилятора: CS1061:
'System.Web.Mvc.AjaxHelper>'
не содержит определения для
'ImageActionLink' и без расширения
метод 'ImageActionLink', принимающий
первый аргумент типа
'System.Web.Mvc.AjaxHelper>'
может быть найден (вы пропускаете
используя директиву или сборку
ссылка?)
Эта ошибка полностью имеет смысл, потому что ImageActionLink больше не существует. Следующее, что я сделал, - откомментировал метод ImageActionLink, перекомпилировал и снова запустил сайт. И точно такая же ошибка «вызов неоднозначен».
Я в растерянности. Я сделал все, что мог придумать, чтобы очистить различные кэши, чтобы исключить это, закомментировать и откомментировать фрагменты кода и проверить, какие части ломаются. Но я застрял не в состоянии пройти мимо ошибки «вызов неоднозначен».
У кого-нибудь есть идеи, как исправить эту ошибку «вызов неоднозначен», поэтому я могу спросить, почему я не могу заставить работать простой метод расширения ajax?
Я избавился от ошибки «вызов неоднозначен». Произошло то, что я скопировал версию кода Arjan Einbu mvc 3, найденную здесь asp-net-mvc-ajax-actionlink-with-image .
Затем я создал новый класс в Visual Studio в папке App_Code, сделал ctrl + a ctrl + v и заменил весь предварительно сгенерированный код шаблона класса только на класс HelperExtensions. Проблема заключалась в том, что я не обернул HelperExtensions пространством имен, которое соответствовало пространству имен веб-сайта.
Что-то в том, как asp.net компилирует файлы кода без пространств имен, все испортило. Я предполагаю, что это, вероятно, потому, что код компилируется в dll основного веб-сайта во время сборки, а затем, когда asp.net запускает, он компилирует любые файлы кода, которые он находит в папке app_code, таким образом, два класса с одинаковым именем и одинаковым именем метода или некоторые например. * 1 050 *
Во всяком случае, теперь, когда я решил это обострение, я запустил свой веб-сайт и получил следующую ошибку ...
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.
Мне действительно не нужен @model IEnumerable<Models.SpeciesType>
вверху моего файла index.cshtml, поэтому я удалил его и попытался снова запустить приложение с той же ошибкой, только на этот раз это
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?)
Кто-нибудь знает, почему я получаю эту ошибку? И как это исправить?