Фьючерсы MVC2 и MVC, вызывающие проблемы RedirectToAction - PullRequest
2 голосов
/ 12 апреля 2010

Я пытался заставить работать строго типизированную версию 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 Ответ

3 голосов
/ 13 апреля 2010

Попробуйте использовать:

return this.RedirectToAction<HomeController>(c => c.Index());

Использование квалификатора this позволяет использовать методы расширения.

...