出于某种原因,Get和Post都会触发第一个动作。
public ActionResult Login()
{
return View();
}
[HttpPost]
public ActionResult Login(FormCollection form)
{
// Login Stuff here... never gets reached!
}
我基本上是直接从MVC音乐商店样本中复制了这个。在另一个应用程序中尝试过,它工作正常。
这是一个相当新的项目,在Visual Studio中使用了基本MVC3项目模板,所有默认设置。
我确保HTML输出指定了POST方法:
<form action="/Home/Login" method="post">
这是我的Login.cshtml
@{
ViewBag.PageTitle = "Login";
}
<section id="index">
<header>
<h2>Login</h2>
</header>
<content>
@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
<panel id="login">
<table>
<tr>
<td>Email:</td>
<td><input name="Email" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input name="Password" type="password" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Login" /></td>
</tr>
</table>
</panel>
}
</content>
</section>
提交表单后,我在浏览器中看到了这个网址:
http://localhost:51606/Home/Login?Email=me@email.com&Password=mypass
这些字段不应该在URL中!为什么我的表单会转换为GET请求?
答案 0 :(得分:4)
再看一下HTML输出,我发现了我的表单周围的另一个表单标签。
原来有人(我)在Views / Shared / _Layout.cshtml中放置了一个表单标签,这是默认的共享布局。
bah,在输入问题后的数字我会发现问题。
答案 1 :(得分:1)
我刚刚将method =“post”action =“”添加到表格标签中并且有效。
@{
ViewBag.Title = "Add New Entry";
}
<h2>Add New Entry</h2>
<form method="post" action="">
<fieldset>
Please enter your name: <br />
<input type="text" name="Name" maxlength="200" />
<br /><br />
Please enter your message: <br />
<textarea name="Message" rows="10" cols="40"> </textarea>
<br /><br />
<input type="submit" value="Submit Entry" />
</fieldset>
</form>