MVC表单操作URL设置不正确

时间:2014-05-23 19:48:15

标签: asp.net asp.net-mvc

我正在开发我的第一个MVC应用程序,而且我已经遇到了BeginForm的问题。当我在本地测试项目时,登录表单操作正在设置(正确)到

<form action="/Account/Login"

当我将它发布到实际网站时,它会莫名其妙地将应用程序名称添加到操作中,因此它看起来像这样

<form action="/appName/Account/Login"

因此,当您尝试实际登录时,路由表不知道发布请求的位置,并且在您按“提交”时没有任何反应。有没有办法可以覆盖这种行为?

Login.cshtml

    @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
 {
............ form
  }

RoutConfig.cs

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 }
            );
        }

1 个答案:

答案 0 :(得分:1)

您的代码没有任何问题。如果您将应用程序作为虚拟目录或应用程序托管在IIS中的网站下,那么ASP.NET MVC帮助程序(如Html.BeginForm)将此应用程序名称考虑在内是完全正常的。因此,您看到的/appname前缀代表网站下IIS中的应用程序名称。您可以在一个网站下托管多个ASP.NET MVC应用程序,您可以看到ASP.NET MVC帮助程序正确地将它们考虑在内。

另一方面,如果您将应用程序直接作为WebSite托管在IIS中,而不创建任何子应用程序,则网址助手会将其考虑在内并生成action="/Account/Login"