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

8

我对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个回答

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
谢谢你,pjumble。这正是我需要的。在 FormMethod.Post 之前没有尝试放置 ReturnUrl。有一些魔法发生了,如果没有别人的帮助很难弄清楚。 - Burjua

3

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- 更简单的内嵌方式:在 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">

请注意,如果您想显式添加post (FormMethod.Post)或get请求,则需要在routeValues参数后添加。以下是官方来源,其中包含良好的示例:官方来源

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接