为什么MVC按钮链接插入不正确的URL

时间:2014-05-28 03:19:57

标签: asp.net-mvc

我有一个简单的mvc登录页面,其中的按钮会生成错误的链接。当我将鼠标悬停在按钮上时,链接(我认为是默认的表单操作,而后者是当前页面)是/resource.ashx?action=login&controller=user。它应该是/ action = login& controller = user。页面的网址是

http://localhost:57505/User/Login.

任何人都可以解释我如何确定resource.ashx在表单提交操作中的位置/原因/方式如何?更重要的是如何解决?

我考虑过路由,以及可能正在修改html的javascript文件,但没有任何事情让我感到罪魁祸首。

cshtml代码如下:

@model MyCompany.MyApp.Website.Models.User.LoginViewModel
@{
    Layout = "~/Views/Shared/_LoginLayout.cshtml";
    ViewBag.Title = "Log in";
}
@using (Html.BeginForm(new { ViewBag.ReturnUrl }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <h1>Welcome to My Website</h1>
    <div>
        @Html.TextBoxFor(m => m.UserName, new { placeholder = "Username" })
        @Html.PasswordFor(m => m.Password, new { placeholder = "Password" })
        <button>Login to MyWebsite</button>
        <div>
            @Html.CheckBoxFor(m => m.RememberMe)
            <label for="keep">Keep me logged in for 5 days</label>
        </div>
        @Html.RouteLink("Password recovery", 
             routeValues: new { controller = "Password", action = "Forgot" })
             <br />
    </div>
} 

我还应该补充说,这个问题发生在我在tfs express 2013中分支的解决方案的实例上。目录结构中有一个额外的级别,而不是原始的,但是我无法解释为什么这很重要。问题是更令人烦恼,因为基本代码工作,而分支代码没有。然后我将工作代码复制到分支中以确保所有内容完全相同,但应用程序正在将此附加元素resource.ashx添加到计算的URL中。我也将目录结构设置为相同,但没有成功。

作为第二个补充,为了回答关于路由的关于rowan的问题,这就是应用程序所具有的。我继承了它,所以我可能无法回答/证明有关所做决定的所有问题。

public class RouteConfig
{
    /// <summary>
    /// Registers the routes.
    /// </summary>
    /// <param name="routes">The routes.</param>
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        ////routes.LowercaseUrls = true;

        // Client website routes
        routes.MapRoute(
            "user-activation",
            "user/activate/{token}",
            new { controller = "user", action = "activate" });

        routes.MapRoute(
            "password-reset",
            "password/reset/{token}",
            new { controller = "password", action = "reset" });

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    }
}

1 个答案:

答案 0 :(得分:1)

我弄明白了这个问题。第三方控件,甚至没有被使用或引用,但仍然在解决方案中,是导致我的登录页面上不需要的URL的意外路由的原因。删除相关的dll修复了问题。但是,我确实需要该组件,因此必须制定解决方案。

特别感谢罗恩让我走上了正确的道路。我需要做的就是在调试器中检查RouteTable,结果很明显是什么原因和罪魁祸首。以前我一直依赖眼球代码,但是它做的比我想象的更多。因此需要检查运行时状态 - 而不仅仅是设计时间。