2009-09-18 14 views
6

I tienen una vista parcial que se representa por varios puntos de vista que son devueltos por varios métodos de acción.ASP.NET MVC: cómo obtener la acción actual desde una vista parcial?

La vista parcial tiene una forma que debe publicar de nuevo a la llamada método de acción.

Tengo entendido que si acabo de llamar

<% Html.BeginForm(); %> 

desde un punto de vista, atributo action del formulario apuntará a la llamada método de acción. No puedo hacer esto, porque necesito establecer el atributo de ID del formulario para fines de javascript. La sobrecarga de Html.BeginForm que me permitirá establecer atributos html también requiere un controlador y una acción explícitos. Así, en lugar de utilizar el asistente de HTML, tan sólo pudiera escribir el elemento de formulario fuera como:

<form action="<%=(NEED TO SOMEHOW GET THE URL TO THE CURRENT ACTION) %>" method="post" id="myForm"> 

yo no estoy seguro de cómo obtener la URL.

Respuesta

14

sólo tiene que pasar nulo para el controlador y la acción. Los valores correctos serán sustituidos. Por ejemplo:

<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "employeeGroupForm" })) 
+1

1 - Claro, no es mi camino, y luego está el camino más fácil :) –

+0

hecho reír! :) –

0

En esa situación, probablemente acaba de tener el controlador (o la vista padre) poner la URL de destino adecuada en su modelo/ViewData.

cuanto a la forma, dentro de su controlador:

public ActionResult MyAction() { 
    MyModel m = new MyModel(); 

    ... 

    m.MyControlAction = "MyAction"; 
    m.MyControlController = "MyController"; 

    return View("MyView", m); 
} 

A continuación, en su opinión:

Html.RenderPartial("MyControl", ViewData.Model); 

Y en su vista parcial:

Html.BeginForm(ViewData.Model.MyControlController, ViewData.Model.MyControlAction, ...) 

Para un diseño más limpio, se probablemente querría que los miembros MyControlController y MyControlAction vengan de una interfaz que cada Modelo que usos que el control debe implementar. Luego haga que la vista parcial tome un modelo fuertemente tipado con ese tipo de interfaz.

+0

de acuerdo, parece que la adición de este a la viewdata sería lo más directa que hacer. – Amir

+0

La respuesta de Craig funcionó para mí, pero ¿cómo se puede obtener la url actual en el controlador? Si fuera a hacer eso, probablemente almacenara la url en viewdata de un método de ejecución onaction anulado, para no tener que seguir haciéndolo en cada método de acción. –

+0

@Ronnie - No necesita la URL actual per se, sólo tiene el controlador y la acción actual - que por supuesto usted sabe cuando se está dentro del método de la acción de un controlador :) –

2

ViewContext.RouteData.Values ​​[ "acción"]

o algo similar hace el trabajo

+0

No sé la acción en tiempo de diseño. –

+0

Apesadumbrado corregimos la llamada, que obtiene el valor de acción de routeData utilizado para encontrar la acción correcta. – AndreasN

Cuestiones relacionadas