2016-05-05 45 views
-1
@using (Ajax.BeginForm("Search", "Filter", new { Area = "Music" }, new AjaxOptions { HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "body-wrapper", OnSuccess = "updateHistory" }, new { @id = "search" })) 
{ 
     <div> 
      <i class="fa fa-search"></i> 
      <input id="searchString" name="searchString" type="search" placeholder="Search"> 
     </div> 
} 

區塊登記:ASP.NET MVC查詢字符串網址未顯示

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"); 

控制器:

public ActionResult Search(string searchString) 
{ 
    //Do search stuff 
} 

每當用戶類型到搜索輸入並提交它的網址是一直s:/Music/Filter/Search,而不是/Music/Filter/Search/{queryStringHere}

如何顯示用戶輸入到網址的查詢? searchString綁定正確,但只是不顯示在網址中。

下面是我在該地區註冊都試過了,但它不映射到這一個由於某種原因:

context.MapRoute(
    "Music_Search", 
    "Music/Filter/Search/{searchString}", 
    defaults: new { controller = "Filter", action = "Search" } 
); 

這裏是生成的URL根據RouteDebugger當我在搜索項中鍵入「小龍女「:

生成的URL:/用戶/過濾/搜索搜索字符串=女僕& X-要求,隨着= XMLHttpRequest的& _ = 1462458566832

編輯: RouteDebugger圖像,它不調用正確的路由配置,因爲它似乎並沒有查詢字符串追加到的RouteData: enter image description here

+0

哪個版本的MVC是這樣的? – nurdyguy

+0

@nurdyguy 5.2.3.0 –

+0

由於你是5或以上,如果可能的話,我建議使用屬性路由而不是路由配置。這是一個完整的方面說明,可能不會解決這個問題,但從長遠來看,你會好得多。 https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/ – nurdyguy

回答

0

試試這個。更改Route接受可選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通過searchString作爲第三個參數:

@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" /> 
} 
+0

'searchString =「MySearch」'確實會傳入url,如果我確實那麼URL就變成:'/ Music/Filter/Search/MySearch',但我需要它是用戶可以輸入的自定義搜索詞,無論他們輸入什麼原因似乎都沒有顯示網址。此外,確切的代碼無法工作,我不認爲因爲面積=「音樂」必須在第三參數 –

+0

你有沒有嘗試過使用文本框見上文。 – Zaki

+0

試過了,還是一樣的問題。添加了routedebugger圖像以發佈。 –

1

瀏覽器什麼都不知道關於你的路由定義(這是服務器端代碼)並且<form>method="get"中的值始終作爲查詢字符串值添加。

這是根本不可能產生User/Filter/Search/Maid除非你是在BeginForm()方法中添加路由值或者你是使用JavaScript/jQuery的提交表單之前更新的的<form>action屬性。