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" />
}