Использование Html.BeginForm для публикации на текущий контроллер - PullRequest
6 голосов
/ 23 июня 2009

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

Допустим, у меня есть контроллеры, у каждого из которых есть действие ActOnChoosenPerson:

FireStaffController

HireStaffController

У меня есть частичный

PersonList.ascx

Формы отображаются как

Html.BeginForm ("FireStaffController", "ActOnChoosenPerson") или

Html.BeginForm ("HireStaffController", "ActOnChoosenPerson")

Какой хороший способ избавиться от параметра контроллера? Прямо сейчас я передаю имя текущего контроллера в модель и использую

Html.BeginForm (Model.CurrentController, "ActOnChoosenPerson")

но это немного неловко.

Ответы [ 3 ]

8 голосов
/ 23 июня 2009

Этот код всегда даст ваш текущий контроллер

<%=( Url.RequestContext.RouteData.GetRequiredString("Controller")) %>

Очевидно, что вы можете использовать его без <% =, как это </p>

Html.BeginForm(
  Url.RequestContext.RouteData.GetRequiredString("Controller")) , 
  "ActOnChoosenPerson") 

Это выглядит более неуклюже, но вашей модели не нужно знать, какой контроллер ее вызывает.

6 голосов
/ 23 июня 2009

Свойство ViewContext RouteData содержит имена текущего контроллера и действия. Вы можете использовать их так:

Html.BeginForm("ActOnChoosenPerson", ViewContext.RouteData.
    GetRequiredString("controller"))
0 голосов
/ 11 июня 2016

Самый простой способ сделать это - просто вызвать BeginForm () без параметров.

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