Как передать параметр запроса и атрибут класса в Html.BeginForm в MVC3? - PullRequest
7 голосов
/ 03 апреля 2012

Я немного запутался с помощниками 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 ]

11 голосов
/ 03 апреля 2012

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

@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>
2 голосов
/ 22 сентября 2017

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

@{
    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 - более простой встроенный способ: используйте значение Route для внутреннего использования с 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 ​​

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

...