MvcContrib - строго типизированные маршруты перегрузки BeginForm к переносимой области вместо использования маршрута - PullRequest
1 голос
/ 27 февраля 2012

Я использую MvcContrib 2.0.95.0 в сети MVC2. Мы создали переносимые области и используем их на странице.

На моей странице просмотра, которая использует виджет из моей портативной области, я заметил, что BeginForm направляет мои сообщения в мою портативную область.

using (Html.BeginForm<MyController>(f => f.SomeResult(null), FormMethod.Post){
}

Это дает следующий маршрут. Обратите внимание на пользовательскую область в маршруте:

<form action="/Custom/My/SomeResult" class="observeform" id="SomeForm" method="post">
....

</form>

Для сравнения я поместил перегруженную строку BeginForm над ней:

using(this.Html.BeginForm("SomeResult", "My"))
{

Моя портативная область не обладает этим на контроллере, поэтому я не понимаю, почему она будет направляться сюда.

... и он выдал следующий правильный маршрут:

<form action="/My/SomeResult" method="post">
....
</form>

Моя переносимая область содержит ограничения пространства имен, тогда как маршрутизация моего потребляющего приложения нет.

Не прибегая к перегрузкам строк в моих ссылках и создании форм, как я могу предотвратить перенос моей портативной области из-за маршрутизации моего потребляющего приложения?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

Чтобы решить, я предпринял следующие шаги.

  1. Получены последние исходные коды Mvc2 Futures
  2. Изменена ссылка System.Web.Mvc для использования библиотеки GAC - не ссылка на проект.
  3. Отредактировал следующий файл: Microsoft.Web.Mvc.LinkBuilder, строка 21:

    // changed this
    VirtualPathData vpd = routeCollection.GetVirtualPath(context, routeValues);
    
    // to this
    VirtualPathData vpd = routeCollection.GetVirtualPathForArea(context, routeValues);
    
  4. После того, как я перекомпилировал и развернул dll в своем проекте, я реорганизовал свой код формы обратно в строго типизированную перегрузку BuildForm (), и он вывел ссылку правильно.

0 голосов
/ 27 февраля 2012

Попробуйте украсить свой контроллер атрибутом [ActionLinkArea] и укажите пустую строку, чтобы указать, что этот контроллер принадлежит корневому сайту, а не какой-либо области:

[Microsoft.Web.Mvc.ActionLinkArea("")]
public class MyController : Controller
{
    ...
}

Теперь помощник Html.BeginForm<MyController> сгенерирует ожидаемый результат.

...