C# ASP.NET MVC查询字符串未显示在Url中

C# ASP.NET MVC查询字符串未显示在Url中,c#,asp.net,asp.net-mvc,routes,C#,Asp.net,Asp.net Mvc,Routes,全局路由配置: context.MapRoute( "Music_default", "Music/{controller}/{action}/{category}", defaults: new { controller = "Home", action = "Index", category = UrlParameter.Optional } ); 控制器: routes.MapRoute( name: "Default", url:

全局路由配置:

 context.MapRoute(
     "Music_default",
     "Music/{controller}/{action}/{category}",
     defaults: new { controller = "Home", action = "Index", category = UrlParameter.Optional }
 );
控制器:

routes.MapRoute(
     name: "Default",
     url: "{area}/{controller}/{action}/{category}",
     defaults: new { area = "Music", controller = "Home", action = "Index", category = UrlParameter.Optional }
).DataTokens.Add("area", "Music");
每当用户输入并提交搜索输入时,Url总是:
/Music/Filter/search
,而不是
/Music/Filter/search/{queryStringHere}

如何显示用户在url中键入的查询?搜索字符串已正确绑定,但未显示在url中

以下是我在区域注册中尝试的内容,但由于某些原因,它没有映射到这一点:

public ActionResult Search(string searchString)
{
    //Do search stuff
}
这是我键入搜索词“Maid”时根据RoutedBugger生成的Url:

生成的URL:/User/Filter/Search?searchString=Maid&X-Requested-With=XMLHttpRequest&979;=1462458566832

编辑: RoutedBugger映像,它没有调用正确的路由配置,因为它似乎没有将查询字符串附加到RoutedData:
试试这个。更改您的
路线
以接受可选的
搜索字符串
参数:

context.MapRoute(
     "Music_Search",
     "Music/Filter/Search/{searchString}",
     defaults: new { controller = "Filter", action = "Search" }
);
然后在
Ajax.BeginForm
中,将
searchString
作为第三个参数传递:

routes.MapRoute(
     name: "Default",
     url: "{area}/{controller}/{action}/{category}/{searchString}",
     defaults: new { area = "Music", controller = "Home", action = "Index", category = UrlParameter.Optional, searchString = UrlParameter.Optional }
).DataTokens.Add("area", "Music");
@使用(Ajax.BeginForm(“搜索”、“筛选”、新建{Area=“Music”}、新建AjaxOptions{HttpMethod=“GET”、InsertionMode=InsertionMode.Replace、UpdateTargetId=“body wrapper”、OnSuccess=“updateHistory”}、新建{@id=“Search”}))
{
//或将值作为输入传递
}

浏览器对您的路由定义(即服务器端代码)一无所知,带有
method=“get”
中的值始终作为查询字符串值添加


除非要在
BeginForm()中添加路由值,否则无法生成
User/Filter/Search/Maid
方法,或者在提交表单之前使用javascript/jquery更新
操作属性。

这是哪个版本的MVC?由于您5岁或以上,如果可能,我建议使用属性路由而不是路由配置。这是一个全面的旁注,可能不会解决这个问题,但从长远来看,你会过得更好
searchString=“MySearch”
如果我这样做,则会传递到url中,因此url会变成:
/Music/Filter/Search/MySearch
,但我需要它成为自定义搜索词,用户可以从他们输入的任何内容中输入,因为某种原因,它似乎不会显示在url中。同样,我认为确切的代码不会起作用,因为Area=“Music”必须在第三个版本中,仍然是同一个问题。添加RoutedBugger图像到帖子中。
routes.MapRoute(
     name: "Default",
     url: "{area}/{controller}/{action}/{category}/{searchString}",
     defaults: new { area = "Music", controller = "Home", action = "Index", category = UrlParameter.Optional, searchString = UrlParameter.Optional }
).DataTokens.Add("area", "Music");
@using (Ajax.BeginForm("Search", "Filter", new { Area = "Music" }, new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "body-wrapper", OnSuccess = "updateHistory" }, new { @id = "search" }))
{
  // Or pass the value as input
  <input type="text" id="searchString" name="searchString" value="@item.Quantity"/>
 <input type="submit" />
}