Как передать параметр запроса и атрибут класса в Html.BeginForm в MVC3?

Я немного запутался с HTML-помощниками в MVC3.

я использовал этот синтаксис при создании до моих форм:

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

это дает мне

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

хорошо, это то, что мне нужно тогда.

теперь мне нужно передать параметр ReturnUrl в форму, чтобы я мог сделать это так:

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

это дало бы мне

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

но мне все равно нужно передать класс css и id в эту форму, и я не могу найти способ сделать это одновременно передается параметр ReturnUrl.

если я добавить FormMethod.Post Он добавляет все мои параметры в качестве атрибутов в тег формы, без FormMethod.Post Он добавляет их в качестве параметров строки запроса.

как мне это сделать?

спасибо.

2 ответов


Вы можете использовать:

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

это даст:

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

1-Более сложный способ: определите routeValues извне, а затем используйте переменную

@{
    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-более простой встроенный способ: используйте значение маршрута внутренне с 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">

просто обратите внимание, что в случае, если вы хотите добавить сообщение (FormMethod.Post) или получить явно это происходит после параметра routeValues

официальный источник с хорошими примерами