如果没有/ MVC4中的索引,表格将无法到达后期行动

时间:2012-09-19 10:32:46

标签: c# razor asp.net-mvc-4

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

2 个答案:

答案 0 :(得分:0)

由于您的路由看起来没问题,问题可能是错误地使用了[HttpPost]属性。如果您指定了帖子触发的操作,我可能会提供更多帮助。

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

答案 1 :(得分:0)

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