Asp.net mvc ASP.NET MVC 3 url路由

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

我在掌握MVC路由时遇到了一些问题。我读了又读,但仍然没有什么意义。我正在尝试映射路线Teams/Summary?teamID=30,以便在浏览器中显示Teams/30。这就是我目前拥有的,但我不明白为什么它不起作用:

//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代码吗?如果手动键入一条应该有效的路线,该路线是否有效?您好,谢谢。当我手动将路线键入浏览器时,该路线可以正常工作。编辑了我的问题以包含控制器和视图。