Asp.net mvc 为什么MVC按钮链接插入了错误的url

Asp.net mvc 为什么MVC按钮链接插入了错误的url,asp.net-mvc,Asp.net Mvc,我有一个简单的mvc登录页面,其中一个按钮生成了一个不正确的链接。当我将鼠标悬停在按钮上时,链接是/resource.ashx?action=login&controller=user,我认为这是默认的表单操作,而当前页面就是这个链接。它应该是/action=login&controller=user。页面的url为 http://localhost:57505/User/Login. 谁能解释一下我将如何确定resource.ashx在哪里/为什么/如何成为表单提交操作的一部分?更重要的是,

我有一个简单的mvc登录页面,其中一个按钮生成了一个不正确的链接。当我将鼠标悬停在按钮上时,链接是/resource.ashx?action=login&controller=user,我认为这是默认的表单操作,而当前页面就是这个链接。它应该是/action=login&controller=user。页面的url为

http://localhost:57505/User/Login.
谁能解释一下我将如何确定resource.ashx在哪里/为什么/如何成为表单提交操作的一部分?更重要的是,如何修复

我已经考虑过路由和javascript文件,这些文件可能会修改html,但我认为没有什么是罪魁祸首

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>
} 
@model MyCompany.MyApp.Website.Models.User.LoginViewModel
@{
Layout=“~/Views/Shared/\u LoginLayout.cshtml”;
ViewBag.Title=“登录”;
}
@使用(Html.BeginForm(新的{ViewBag.ReturnUrl}))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
欢迎来到我的网站
@TextBoxFor(m=>m.UserName,新的{placeholder=“UserName”})
@Html.PasswordFor(m=>m.Password,新的{placeholder=“Password”})
登录我的网站
@CheckBoxFor(m=>m.RememberMe)
让我登录5天
@Html.RouteLink(“密码恢复”,
routeValue:new{controller=“Password”,action=“忘记”})

}
我还应该补充一点,这个问题发生在我在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 });
    }
}
公共类路由图
{
/// 
///登记路线。
/// 
///路线。
公共静态无效注册表项(路由收集路由)
{
routes.IgnoreRoute(“{resource}.axd/{*pathInfo}”);
////routes.LowercaseUrls=true;
//客户网站路线
routes.MapRoute(
“用户激活”,
“用户/activate/{token}”,
新建{controller=“user”,action=“activate”});
routes.MapRoute(
“密码重置”,
“密码/reset/{token}”,
新的{controller=“password”,action=“reset”});
routes.MapRoute(
“默认”,
“{controller}/{action}/{id}”,
新的{controller=“Home”,action=“Index”,id=urlparmeter.Optional});
}
}

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


特别感谢罗文让我走上了正确的道路。我所需要做的就是在调试器中检查RouteTable,很明显原因和罪魁祸首是什么。以前我一直依赖于查看代码,但它做的事情超出了我的预期。因此需要检查运行时状态,而不仅仅是设计时。

返回URL的值是多少?您的路由配置是什么样子的?ReturnUrl为null,但在有效的解决方案实例中也是null。我在主条目中添加了有关路由的信息。它并不像我预期的那样出现在Global.asax.cs中,但我认为这并不重要。