2016-05-05 37 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> 
} 

エリア登録が表示されません検索入力に入力してURLを送信しますs:の代わりに/Music/Filter/Searchです。ASP.NET MVCクエリ文字列は、URLに

ユーザーがURLに入力したクエリを表示するにはどうすればよいですか? searchStringは正しくバインドされていますが、URLには表示されません。ここで

私はエリア登録にしようとしているものだ、しかし、それはいくつかの理由で、この1にマッピングされていない:私は検索用語を入力するときここ

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

はRouteDebuggerに応じて生成されたURLは 'メイド ':

生成されたURL:/ユーザー/フィルター/検索するsearchString =メイド& 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

はこれを試してみてください。次に、あなたの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"); 

@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'になりますが、何らかの理由で表示されないような入力にユーザーが入力できるカスタム検索語にする必要がありますurl。また、その正確なコードはうまくいきません。なぜならArea = "Music"は3番目のパラメータであるためです。 –

+0

上記のテキストボックスで試してみましたか? – Zaki

+0

それはまだ同じ問題を試してみました。投稿するroutedebugger画像を追加しました。 –

1

ブラウザは、(サーバー側のコードである)あなたのルートの定義について何も知らない、オプションのsearchStringパラメータを受け入れるようにRouteを変更<form>の値はmethod="get"で、常にクエリ文字列値として追加されます。

は、あなたがBeginForm()方法でルート値を追加したか、あなたがフォームを送信する前に<form>ののaction属性を更新するためにはJavaScript/jQueryのを使用していた場合を除きUser/Filter/Search/Maidを生成するだけでは不可能です。

関連する問題