Я пытался заставить работать строго типизированную версию 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 #), могли бы они, пожалуйста, сообщить мне, что, если вообще, они сделали по-другому?
Спасибо!