2012-04-03 12 views
6

Sono un po 'confuso con gli helper HTML in MVC3.Come passare il parametro di query e l'attributo di classe a Html.BeginForm in MVC3?

Ho usato questa sintassi durante la creazione mie forme prima:

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

questo mi dà

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

bene, questo è quello che mi serviva allora.

Ora ho bisogno di passare parametri ReturnUrl alla forma, così posso farlo in questo modo:

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

che mi avrebbe dato

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

ma ho ancora bisogno di passare di classe CSS e id a questo modulo e non riesco a trovare il modo di farlo contemporaneamente passando il parametro ReturnUrl.

Se aggiungo FormMethod.Post aggiunge tutti i miei parametri come attributi al tag form, senza FormMethod.Post li aggiunge come parametri di stringa di query.

Come faccio?

Grazie.

risposta

10

È possibile utilizzare:

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

questo darà:

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

Grazie pjumble, questo è quello che mi serve. Non ho provato a mettere ReturnUrl prima di 'FormMethod.Post'. Sta succedendo un po 'di magia, difficile da capire senza l'aiuto di qualcuno. – Burjua

1

1-Harder modo: definire routeValues ​​esternamente e quindi utilizzare la variabile

@{ 
    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- semplice linea modo: utilizzare internamente il valore Percorso 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"> 

Basta notare che in caso si desidera aggiungere postale (FormMethod.Post) o di ottenere in modo esplicito viene dopo parametro routeValues ​​

official source with good examples

Problemi correlati