我有一个简单的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 });
}
}
答案 0 :(得分:1)
我弄明白了这个问题。第三方控件,甚至没有被使用或引用,但仍然在解决方案中,是导致我的登录页面上不需要的URL的意外路由的原因。删除相关的dll修复了问题。但是,我确实需要该组件,因此必须制定解决方案。
特别感谢罗恩让我走上了正确的道路。我需要做的就是在调试器中检查RouteTable,结果很明显是什么原因和罪魁祸首。以前我一直依赖眼球代码,但是它做的比我想象的更多。因此需要检查运行时状态 - 而不仅仅是设计时间。