2009-06-23 37 views
6

Tengo un parcial que se usa en varias vistas. El parcial contiene formularios. La acción cuando se envía un formulario es siempre el mismo, pero el controlador que contiene la acción depende de la vista.Usando Html.BeginForm para publicar en el controlador actual

Digamos que tengo controladores que cada uno tiene una acción ActOnChoosenPerson:

FireStaffController

HireStaffController

Tengo un parcial

PersonList.ascx

Las formas se representan como

Html.BeginForm ("FireStaffController", "ActOnChoosenPerson") o

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

¿Cuál es una buena manera de deshacerse del parámetro del controlador? En este momento me pase el nombre del controlador de corriente en el modelo y uso

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

pero que es un poco incómodo.

Respuesta

8

Este código siempre se le dará a su controlador de corriente

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

Obviamente se puede utilizar sin el <% = como esto

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

Parece más torpe pero su modelo no debería necesitar saber qué controlador lo está llamando.

+0

El caso del valor devuelto varía con lo que haya en la url en algunos casos. –

6

La propiedad ViewContext RouteData contiene los nombres del controlador actual y la acción. Se podría utilizar como esto:

Html.BeginForm("ActOnChoosenPerson", ViewContext.RouteData. 
    GetRequiredString("controller")) 
+0

Agradable, me gana por 36 segundos. :) –

+0

Prefiero este método, pero tenga en cuenta que tiene el controlador y los parámetros de acción en el orden incorrecto, y el indexador RouteDate.Values ​​devuelve un objeto, no una cadena, por lo que necesita un molde. – fearofawhackplanet

+0

@fearofawhackplanet: ¡Gracias! Cambié los parámetros y también cambié la propiedad Values ​​al método GetRequiredString. –

0

La forma más sencilla de hacer esto sería simplemente llamar a BeginForm() sin parámetros.

Cuestiones relacionadas