我最近将项目升级到MVC 4.我在Account / Index上有一个登录页面。使用Html.BeginForm时,未到达控制器中的后期操作。
在进一步搞乱后,我发现帮助者生成的HTML是:
<form action="/Account" autocomplete="off" method="post" requireSSL="true">
如果我用html替换Html.BeginForm:
<form action="/Account/Index" autocomplete="off" method="post" requireSSL="true">
正确地达到了后期行动。
我不明白为什么?这对于MVC 3以前一直有效。注册的路由是标准的Microsoft模板:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
修改
控制器代码:
public ActionResult Index()
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("RedirectUser");
}
return View();
}
[HttpPost]
public ActionResult Index(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl != "/")
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("RedirectUser", "Account");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
答案 0 :(得分:0)
由于您的路由看起来没问题,问题可能是错误地使用了[HttpPost]属性。如果您指定了帖子触发的操作,我可能会提供更多帮助。
使用浏览器导航到/ Account / Index vs / Account /时有区别吗?如果没有,它肯定是一个错误使用的属性。
答案 1 :(得分:0)
即使您在浏览器中输入它,它似乎也是一个问题。需要报告错误