Действие ASP.Net MVC Form в возвращенном представлении - PullRequest
2 голосов
/ 23 сентября 2010

Сохраню это как можно проще: -

У меня есть контроллер, который будет возвращать либо ViewA, либо ViewB - например,

[HttpPost]
public ActionResult ViewA(BlahModel model)
{
    if (isTrue)
      return View(model);
    else
      return View("ViewB", model);
}

...

У меня проблема в том, что у ViewB есть форма.И что происходит, если это возвращается, атрибут действия тега по-прежнему указывает на ViewA.

/MyControllerName/ViewA

Я думал, что мог бы сделать что-то вроде этого:

using (Html.BeginForm("ViewB","MyControllerName"))

Но этовозвращает следующий URL в разметке:

/ViewB?action=ViewB&controller=MyControllerName

Как заставить помощника HTML правильно вернуть следующее?

/MyControllerName/ViewB

Большое спасибо

ОБНОВЛЕНИЕ

Это действительно было вызвано некрасивой устаревшей маршрутизацией, когда проект находился на полпути между WebForms и MVC

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Есть ли у вас действие с именем ViewB?Если нет, механизм маршрутизации не может понять, что вы запрашиваете, и добавляет дополнительные переменные в строку запроса для цели.Одно действие, которое отображает два разных представления, подойдет, но если вы хотите, чтобы ViewB до POST отличалось от ViewA, тогда вам нужно действие в контроллере для ViewB.

РЕДАКТИРОВАТЬ: далееПояснение: если всегда нужно вызывать действие ViewA , то вам не нужно действие ViewB , а ваше ViewB представление должнопросто отправьте обратно в ViewA действие .

Если ViewB представление должно выполнить действие , отличное от вашего ViewA view , тогда вам нужно создать еще одно action для ViewB до POST to.

Извините за все жирные, но я просто хотел бытьпонять различия между действиями и взглядами.

2 голосов
/ 23 сентября 2010

Это проблема в таблице маршрутизации.Механизм маршрутизации не может найти маршрут, описывающий это действие \ контроллер, и просто помещает эти параметры в строку запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...