MVC HttpPost属性无效

4
由于某种原因,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>

在我提交表单后,我在浏览器中看到了这个URL:

http://localhost:51606/Home/Login?Email=我的邮箱地址&Password=我的密码

这些字段不应该出现在URL中!为什么我的表单被转换成GET请求?


2
我复制了你的代码,但它对我来说运行良好。抱歉,我甚至不知道该建议什么!也许...确保使用了正确的视图? - Beno
@Beno:请看下面我的回答。我应该先仔细查看整个HTML输出。 - Neil N
2个回答

4

仔细查看HTML输出,我发现另一个表单标签包围了我的表单。

原来有人(就是我)在Views/Shared/_Layout.cshtml中放置了一个表单标签,这是默认的共享布局。

唉,事实证明在这里输入问题后我找到了问题所在。


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>       

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