Asp.net mvc ASP.NET MVC 3 url路由
我在掌握MVC路由时遇到了一些问题。我读了又读,但仍然没有什么意义。我正在尝试映射路线Teams/Summary?teamID=30,以便在浏览器中显示Teams/30。这就是我目前拥有的,但我不明白为什么它不起作用:Asp.net mvc ASP.NET MVC 3 url路由,asp.net-mvc,asp.net-mvc-3,model-view-controller,Asp.net Mvc,Asp.net Mvc 3,Model View Controller,我在掌握MVC路由时遇到了一些问题。我读了又读,但仍然没有什么意义。我正在尝试映射路线Teams/Summary?teamID=30,以便在浏览器中显示Teams/30。这就是我目前拥有的,但我不明白为什么它不起作用: //Teams routes routes.MapRoute( "TeamsSummary", "Teams/{teamID}", new { controller = "Teams", action = "Index", team
//Teams routes
routes.MapRoute(
"TeamsSummary",
"Teams/{teamID}",
new { controller = "Teams", action = "Index", teamID = UrlParameter.Optional }
);
“不工作”,我的意思是网页加载后仍在浏览器地址栏中显示Teams?teamID=30
有人能帮我理解我需要做什么来执行这样一个简单的映射吗?顺便说一下,我没有设置任何我认为会干扰的其他路由,它列在我的Global.asax.cs文件的默认路由之前
如果你有一些关于这个主题的好文章和教程,那也会很有帮助。谢谢
编辑:
如果我手动键入URL,路由工作正常。现在,当我使用表单发回控制器时出现问题:
public ActionResult Index(TeamsViewModel model)
{
if (model.teamID != null)
model.TeamSummary = new TeamSummaryViewModel(model.teamID);
return View(model);
}
控制器:
public ActionResult Index(TeamsViewModel model)
{
if (model.teamID != null)
model.TeamSummary = new TeamSummaryViewModel(model.teamID);
return View(model);
}
视图:
编辑2:
将原始操作更改为TeamsController上的索引,而不是以前的摘要。乍一看,路由似乎没有任何明显的错误 也许您需要为TeamID指定一个默认值?在TeamID参数中添加一个限制,以便更好地定义路线并允许团队下的其他路线,这不会有什么坏处 例如 更新 你的代码
Html.BeginForm("Index","Teams",FormMethod.Get)
将创建一个表单,将信息作为GET而不是POST发送回浏览器。这基本上意味着所有的输入值都将作为查询字符串值附加。。。这是在客户端完成的,与ASP.NET MVC路由无关
如果您不熟悉,可以查看W3学校关于表单操作的文章-。乍一看,这条路线似乎没有任何明显的问题 也许您需要为TeamID指定一个默认值?在TeamID参数中添加一个限制,以便更好地定义路线并允许团队下的其他路线,这不会有什么坏处 例如 更新 你的代码
Html.BeginForm("Index","Teams",FormMethod.Get)
将创建一个表单,将信息作为GET而不是POST发送回浏览器。这基本上意味着所有的输入值都将作为查询字符串值附加。。。这是在客户端完成的,与ASP.NET MVC路由无关
如果您不熟悉,可以查看W3学校关于表单操作的文章-。发生的情况是,在匹配的团队汇总路由之前定义了另一个路由,您需要更改路由的顺序或添加约束,以确保匹配所需的路由。如果您想了解更多信息,我建议您阅读。发生的情况是,在匹配的团队汇总路线之前定义了另一条路线。您需要更改路线的顺序或添加约束,以确保匹配所需的路线。路由可能很棘手,如果您想了解更多信息,我建议您阅读。您的路由工作非常出色:
Global.asax
在html视图中创建的链接:
<%= Html.ActionLink("Summary", "Summary", "Teams", new {teamID = 11 },null)%>
您的路由工作得非常好:
Global.asax
在html视图中创建的链接:
<%= Html.ActionLink("Summary", "Summary", "Teams", new {teamID = 11 },null)%>
请检查正确的路由名称,创建ActionLink时必须与Global.asax文件中指定的相同。请检查正确的路由名称,创建ActionLink时必须与Global.asax文件中指定的相同。如果需要,可以取消传统路由, 按照这个家伙的建议 如果您遵循该指南,您很可能会想到:
[Route("Teams/{teamID}")]
公共行动结果IndexTeamsViewModel模型
{
如果model.teamID!=null
model.TeamSummary=新的TeamSummaryViewModelmodel.teamID
return View(model);
}
如果你愿意,你可以取消传统的路线, 按照这个家伙的建议 如果您遵循该指南,您很可能会想到:
[Route("Teams/{teamID}")]
公共行动结果IndexTeamsViewModel模型
{
如果model.teamID!=null
model.TeamSummary=新的TeamSummaryViewModelmodel.teamID
return View(model);
}
可以显示用于生成链接的Html.ActionLink代码吗?如果手动键入一个应该有效的代码,该路由是否有效?您好,谢谢。当我手动将其键入浏览器时,该路由工作正常。编辑了我的问题以包括控制器和视图。可以显示用于生成链接的Html.ActionLink代码吗?如果手动键入一条应该有效的路线,该路线是否有效?您好,谢谢。当我手动将路线键入浏览器时,该路线可以正常工作。编辑了我的问题以包含控制器和视图。