Html.BeginFormを取得してMVCルートを修正する方法
-
07-07-2019 - |
質問
ASP.NET MVCアプリケーションには、次のGET入力フィールドがあります。
<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %>
<input type="text" name="searchQuery" id="searchQuery" />
<% } %
ルートに行きたい:
routes.MapRoute("ProductSearchRoute",
"Products/Search/{searchQuery}/{pageNumber}",
new { controller = "Products", action = "Search", pageNumber = 1 });
問題は、クエリ文字列として/ Productsに送られることです。製品?searchQuery =モーター。 ProductSearchRouteを使用して代わりに/ Products / Search / Motoroilを形成するにはどうすればよいですか?
解決
あなたが正しく理解している場合、フォームの入力に基づいて、フォームが投稿する場所を動的に変更しようとしていますか?
フォームのターゲット属性を変更するには、このためにJavaScriptを使用する必要があります。 BeginForm()は、htmlの観点からは静的なformタグをレンダリングするためのものです。
他のヒント
試すことができます:
<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %>
親切、
ダン
public ActionResult SearchQuery (string searchQuery)
{
return RedirectToAction (searchQuery, "/Products/Search" );
}
public ActionResult Search (string searchQuery)
{
return View();
}
@Daniel Elliottが提案したように、BeginRouteFormを使用します。 URLを適切に生成するには、ルートテーブルで定義されているのと同じ名前でルート値を設定する必要があります。
@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 })
{
}
所属していません StackOverflow