0

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

2 回答 2

0

由于您的路由看起来不错,因此问题可能是 [HttpPost] 属性使用不正确。如果您指定发布后触发的操作,我可能会提供更多帮助。

使用浏览器导航到 /Account/Index 与 /Account/ 时有区别吗?如果不是,它肯定是一个错误使用的属性。

于 2012-09-19T10:38:47.333 回答
0

即使您在浏览器中输入它,这似乎也是一个问题。错误需要报告

于 2012-09-19T10:43:38.263 回答