如何将查询参数和类属性传递给MVC3中的Html.BeginForm?

时间:2012-04-03 11:05:53

标签: html asp.net-mvc asp.net-mvc-3 razor html-helper

我对MVC3中的Html帮助有点困惑。

我在创建表单之前使用了这种语法:

@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 个答案:

答案 0 :(得分:11)

您可以使用:

@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 :(得分:1)

1-Harder方式:在外部定义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内部使用Route值

@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参数之后

official source with good examples