2012-04-03 5 views
6

Ich bin ein wenig verwirrt mit HTML-Helfern in MVC3.Wie Übergeben Abfrageparameter und Klassenattribut zu Html.BeginForm in MVC3?

benutzen ich diese Syntax, wenn vor meinem Erstellen von Formularen:

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

mir die

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

fein gibt, das ist, was ich dann brauchte.

Jetzt brauche ich ReturnUrl Parameter in das Formular übergeben, so kann ich es wie folgt tun:

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

Das würde mir

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

aber ich brauche noch CSS-Klasse zu übergeben und ID zu diesem Formular und ich kann nicht den Weg finden, es gleichzeitig ReturnUrl Parameter übergeben.

Wenn ich FormMethod.Post hinzufügen fügt es alle meine Parameter als Attribute zum Formular-Tag, ohne FormMethod.Post fügt sie sie als Abfrage-String-Parameter.

Wie mache ich das?

Danke.

Antwort

10

können Sie verwenden:

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

dies gibt:

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

Dank pjumble, das ist, was ich brauche. Ich habe nicht versucht, ReturnUrl vor 'FormMethod.Post' zu setzen. Ein bisschen Magie passiert dort, es ist schwierig, es ohne jemandes Hilfe herauszufinden. – Burjua

1

1-Härtere Weg: definieren Routevalues ​​extern und verwenden dann die Variable

@{ 
    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- einfachen Inline Weg: Verwenden Sie den Route-Wert intern mit 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"> 

Nur beachten Sie, dass im Fall, dass Sie Post (FormMethod.Post) hinzufügen möchten oder sich explizit kommt es nach Routevalues ​​Parameter

official source with good examples

Verwandte Themen