2012-04-03 17 views
6

Estoy un poco confundido con Html helpers en MVC3.¿Cómo pasar el parámetro de consulta y el atributo de clase a Html.BeginForm en MVC3?

que utiliza esta sintaxis al crear mis formas antes:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { @class = "auth-form" })) { ... } 

esto me da

<form action="/controller/action" class="auth-form" method="post">...</form> 

bien, eso es lo que necesitaba entonces.

ahora tengo que pasar parámetro ReturnUrl a la forma, por lo que puede hacerlo de esta manera:

@using (Html.BeginForm("action", "controller", new { ReturnUrl="myurl" })) { ... } 

que me daría

<form action="/controller/action?ReturnUrl=myurl" method="post"></form> 

pero todavía necesita para pasar la clase css y id a esta forma y no puedo encontrar la manera de hacerlo simultáneamente pasando el parámetro ReturnUrl.

Si agrego FormMethod.Post agrega todos mis parámetros como atributos a la etiqueta del formulario, sin FormMethod.Post los agrega como parámetros de cadena de consulta.

¿Cómo lo hago?

Gracias.

Respuesta

10

Se puede utilizar:

@using (Html.BeginForm("action", "controller", new { ReturnUrl="myurl" }, FormMethod.Post, new { @class = "auth-form" })) { ... } 

Esto le dará:

<form action="/controller/action?ReturnUrl=myurl" class="auth-form" method="post"> 
    ... 
</form> 
+1

Gracias pjumble, eso es lo que necesito. No intenté poner ReturnUrl antes de 'FormMethod.Post'. Un poco de magia está sucediendo allí, es difícil de entender sin la ayuda de alguien. – Burjua

1

1-Harder manera: definir routeValues ​​externamente y luego usar la variable en línea

@{ 
    var routeValues = new RouteValueDictionary(); 
    routeValues.Add("UserId", "5"); 
    // you can read the current QueryString from URL with equest.QueryString["userId"] 
} 
@using (Html.BeginForm("Login", "Account", routeValues)) 
{ 
    @Html.TextBox("Name"); 
    @Html.Password("Password"); 
    <input type="submit" value="Sign In"> 
} 
// Produces the following form element 
// <form action="/Account/Login?UserId=5" action="post"> 

2- sencillo manera: utilice el valor de la ruta internamente con Razor

@using (Html.BeginForm("Login", "Account", new { UserId = "5" }, FormMethod.Post, new { Id = "Form1" })) 
{ 
    @Html.TextBox("Name"); 
    @Html.Password("Password"); 
    <input type="submit" value="Sign In"> 
} 
// Produces the following form element 
// <form Id="Form1" action="/Account/Login?UserId=5" action="post"> 

Ten en cuenta que en caso de que desee agregar post (FormMethod.Post) u obtener de forma explícita que se produce después de parámetro routeValues ​​

official source with good examples

Cuestiones relacionadas