Asp.net mvc 如何在路由配置中引用常量URL?

Asp.net mvc 如何在路由配置中引用常量URL?,asp.net-mvc,routing,Asp.net Mvc,Routing,假设我在一个网页中有以下内容 <% using (Html.BeginForm("ShowData", "Summary")) %> <% { %> <div class="dropdown"><%=Html.DropDownList("CourseSelection", Model.CourseList, new { @class = "dropdown", onchange="this.form.submit();" })%> </di

假设我在一个网页中有以下内容

<% using (Html.BeginForm("ShowData", "Summary")) %>
<% { %>
<div class="dropdown"><%=Html.DropDownList("CourseSelection", Model.CourseList, new { @class = "dropdown",  onchange="this.form.submit();" })%> </div>
<% } %>
我有以下路线:

    routes.MapRoute(null, "Summary", new { controller = "Summary", action = "ShowData", CourseSelection = (string) null });

    routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Login", action = "Index", id = UrlParameter.Optional });
当用户选择dropdownlist中的项目时,返回的URL为:

http://localhost:1721/Summary/ShowData?CourseSelection = UserSelection
显然,列表中的第一条路线没有匹配

我不希望URL显示操作名称和参数。我只是想显示我在URL中硬编码的“摘要”。如何实现这一点?

当您查看此文件的html源代码时

 <% using (Html.BeginForm("UpdateView", "MyController")) %> 
    <% { %> 
    <div class="dropdown"><%=Html.DropDownList("Selection", Model.List, new { onchange="this.form.submit();" })%></div>          
    <% } %> 
注意URL模式中操作的附加项

这对我有用

Global.asax

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(null, "Summary", new { controller = "Summary", action = "ShowData", CourseSelection = (string)null });

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

}
总和控制器

公共类摘要控制器:控制器 { // //获取:/Summary/

public ActionResult Index()
{
    return View();
}

public ActionResult ShowData(string CourseSelection)
{
    return View();
}
默认视图中的代码

<%
    var list = new List<string> { "a", "b", "c" };

    var selList = new SelectList(list); %>
<% using (Html.BeginForm("ShowData", "Summary")) %>
<% { %>
<div class="dropdown">
    <%=Html.DropDownList("CourseSelection", selList, new { @class = "dropdown",  onchange="this.form.submit();" })%>
</div>
<% } %>


}

这里的问题是您的路线有一个默认值

CourseSelection=(字符串)null

它不是路由URL的一部分(也称为“摘要”)

在生成URL时,有一种特殊的逻辑,即当URL中没有参数时,路由的任何默认值都必须与指定的参数匹配

因此,另一种解决方法是:

using (Html.BeginForm("ShowData", "Summary", 
  new {CourseSelection = (string)null})) {
  ...
}
但是,由于您正在将该值发布到操作中,我不明白为什么您在路线中将CourseSelection作为默认值。您只需要将它作为一个action方法参数,当它在发布的表单数据中时,它将自动绑定

因此,另一种解决方案是更改路线,如下所示:

routes.MapRoute(null, "Summary", 
  new { controller = "Summary", action = "ShowData" });

很抱歉延迟回复。我一直在做更多的研究,但我仍在努力理解自定义路由在mvc中是如何工作的。我已经编辑了我原来的帖子。你还能帮忙吗?
using (Html.BeginForm("ShowData", "Summary", 
  new {CourseSelection = (string)null})) {
  ...
}
routes.MapRoute(null, "Summary", 
  new { controller = "Summary", action = "ShowData" });