2012-04-03 6 views
6

Jestem trochę zmieszany z pomocnikami Html w MVC3.Jak przekazać parametr zapytania i atrybut klasy do Html.BeginForm w MVC3?

użyłem tej składni podczas tworzenia moje formularze przed:

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

to daje mi

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

grzywny, to jest to, co potrzebne wtedy.

Teraz trzeba przekazać parametr ReturnURL do formy, więc mogę to zrobić tak:

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

że da mi

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

ale nadal muszę zdać klasę css i id do tego formularza i nie mogę znaleźć sposobu, aby to zrobić jednocześnie przekazując parametr ReturnUrl.

Jeśli dodać FormMethod.Post dodaje wszystkie moje parametry atrybutów do tagu formularza, bez FormMethod.Post dodaje je jako parametry ciągu zapytania.

Jak to zrobić?

Dzięki.

Odpowiedz

10

Można użyć:

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

to da:

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

Dzięki pjumble, to co muszę. Nie próbowałem umieścić ReturnUrl przed 'FormMethod.Post'. Trochę magii się tam dzieje, trudno to zrozumieć bez czyjejś pomocy. – Burjua

1

1-Harder sposób: define routeValues ​​zewnętrznie, a następnie użyć zmiennej

@{ 
    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- prostsze inline sposób: użyj wartości Trasa wewnętrznie z 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"> 

Wystarczy pamiętać, że w przypadku, gdy chcesz dodać post (FormMethod.Post) lub uzyskać wyraźnie chodzi po parametrze routeValues ​​

official source with good examples

Powiązane problemy