Фьючерсы MVC2 и MVC, вызывающие проблемы RedirectToAction
Я пытался заставить работать строго типизированную версию RedirectToAction из проекта MVC Futures, но я никуда не попал. Ниже приведены шаги, которые я выполнил, и ошибки, с которыми я столкнулся. Буду признателен за любую оказанную помощь.
Я создал новое приложение MVC2 и изменил действие "О программе" на HomeController, чтобы перенаправлять на страницу "Индекс".
Return RedirectToAction("Index")
Однако я хотел использовать строго типизированные расширения, поэтому я скачал MVC Futures из CodePlex и добавил ссылку на Microsoft.Web.Mvc в свой проект.
Я добавил следующий оператор "import" в начало HomeContoller.vb
Imports Microsoft.Web.Mvc
Я закомментировал вышеупомянутое RedirectToAction и добавил следующую строку:
Return RedirectToAction(Of HomeController)(Function(c) c.Index())
Все идет нормально. Тем не менее, я заметил, что если я раскомментирую первый (не универсальный) RedirectToAction, он теперь вызывает следующую ошибку компиляции:
Ошибка 1 Не удалось разрешить перегрузку, так как доступный "RedirectToAction" не может быть вызван с этими аргументами:
Метод расширения 'Открытая функция RedirectToAction(Of TController)(действие как System.Linq.Expressions.Expression(Of System.Action(Of TController)))) Как System.Web.Mvc.RedirectToRouteResult "определено в" Microsoft.Web.Mvc.ControllerExtensions': Тип (ы) данных параметра (ов) типа не могут быть> выведены из этих аргументов. Явное указание типов данных может исправить эту ошибку.
Метод расширения 'Public Function RedirectToAction(действие как System.Linq.Expressions.Expression(Of System.Action(Of HomeController)))) как System.Web.Mvc.RedirectToRouteResult', определенное в "Microsoft.Web.Mvc.ControllerExtensions": значение тип 'String' не может быть преобразован в 'System.Linq.Expressions.Expression(Of System.Action(Of mvc2test1.HomeController))'.
Даже несмотря на то, что intelli-sense показывал 8 перегрузок (исходные 6 неуниверсальных перегрузок плюс 2 новые универсальные перегрузки из сборки Futures), при попытке компиляции кода компилятор "найдет" только 2 не общие методы расширения из оценки Futures.
Я подумал, что это может быть проблемой, из-за того, что я использовал конфликтующие версии сборки MVC2 и сборки futures, поэтому я добавил MvcDiaganotics.aspx из загрузки Futures в мой проект, и все выглядело правильно:
Информация о сборке ASP.NET MVC (System.Web.Mvc.dll)
Версия сборки: ASP.NET MVC 2 RTM (2.0.50217.0)
Полное имя: System.Web.Mvc, версия =2.0.0.0, культура = нейтральная, PublicKeyToken=31bf3856ad364e35
База кода: файл:///C:/WINDOWS/assembly/GAC_MSIL/System.Web.Mvc/2.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll
Развертывание: GAC-развернуто
Информация о сборке фьючерсов ASP.NET MVC (Microsoft.Web.Mvc.dll)
Версия сборки: ASP.NET MVC 2 RTM Futures (2.0.50217.0)
Полное имя: Microsoft.Web.Mvc, версия =2.0.0.0, культура = нейтральная, PublicKeyToken = ноль
Кодовая база: файл:///xxxx/bin/Microsoft.Web.Mvc.DLL
Развертывание: bin-deployed
Это сводит меня с ума! Поскольку я подумал, что это может быть какой-то проблемой VB, я создал новый проект MVC2 с использованием C# и попробовал то же самое, что и выше.
Я добавил следующее выражение "using" в начало HomeController.cs
using Microsoft.Web.Mvc;
На этот раз в методе действия "О" мне удалось вызвать неуниверсальный RedirectToAction, набрав полную команду следующим образом:
return Microsoft.Web.Mvc.ControllerExtensions.RedirectToAction<HomeController>(this, c => c.Index());
Несмотря на то, что у меня был оператор using в верхней части класса, я пытался вызвать неуниверсальный RedirectToAction следующим образом:
return RedirectToAction<HomeController>(c => c.Index());
Я получил бы следующую ошибку компиляции:
Ошибка 1 Неуниверсальный метод "System.Web.Mvc.Controller.RedirectToAction (string)" нельзя использовать с аргументами типа
Что дает? Я не пытаюсь сделать что-то необычное. Это простой ванильный проект MVC2 со ссылкой только на сборку Futures.
Я надеюсь, что упустил что-то очевидное, но я слишком долго чесал голову, поэтому решил, что мне нужно будет помочь.
Если кому-то удалось реализовать этот простой сценарий (в VB и / или C#), могли бы они сообщить мне, что они сделали по-другому?
Спасибо!
1 ответ
Попробуйте использовать:
return this.RedirectToAction<HomeController>(c => c.Index());
С использованием this
квалификатор позволяет использовать методы расширения.