【发布时间】:2011-12-30 02:07:27
【问题描述】:
我有一个简单的登录表单,我希望将其发布到 ASP.Net MVC。我发现如果将操作设置为 /Login 它可以工作。但是如果我写出诸如“/Login/Index”之类的动作名称,那么它就会失败。服务器将 302 返回到登录页面,并且永远不会调用 Index() 的 POST 版本。这是为什么呢?
这是 HTML:
<form action="/Login/Index/" method="post">
<label for="username">Username</label>
<input type="text" id="username" name="username" maxlength="60" />
<label for="password">Password</label>
<input type="password" id="password" name="password" maxlength="20" />
<input type="submit" value="Login" />
</form>
这是控制器:
public class LoginController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string username, string password)
{
return null;
}
}
这是 Global.asax 中定义的唯一路由
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Movie", action = "Index", id = UrlParameter.Optional }
);
已解决: 在我的 Web.Config 中,我有 loginUrl="~/Login" 并且它需要是 "~/Login/Index" 否则访问被拒绝 URL 并重定向回登录页面。
【问题讨论】:
-
您是否有可能在未重建的情况下更改了视图?
-
在 Firebug 中监控活动客户端。如果
method是post,它应该执行 POST,但它可能会立即被重定向到其他东西。那里可能有线索。 -
对不起,实际上我看到我收到了一个 POST,但服务器以 302 响应登录。为什么不调用 Index 的 POST 版本?
-
你确定没有调用 POST 吗?您是否在“return null”行放置断点进行检查?
-
我认为解决了。在我的 Web.Config 中,我有 loginUrl="~/Login" 并且它必须是 "~/Login/Index" 否则访问被拒绝 URL 并重定向回登录页面。
标签: asp.net html asp.net-mvc