我最近将一个项目升级到 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);
}