Wie man Html.BeginForm man richtig MVC-Route
-
07-07-2019 - |
Frage
In meinem ASP.NET MVC-Anwendung habe ich Folgendes BEKOMMEN Eingabefeld:
<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %>
<input type="text" name="searchQuery" id="searchQuery" />
<% } %
Ich will, dass das gehen auf der route:
routes.MapRoute("ProductSearchRoute",
"Products/Search/{searchQuery}/{pageNumber}",
new { controller = "Products", action = "Search", pageNumber = 1 });
Das problem ist, es geht um /Produkte als query-string, z.B.Produkte?Suchergebniss=Motoroil.Wie bekomme ich es, um meine ProductSearchRoute und anstatt der form /Produkte/Search/Motoroil ?
Lösung
Wenn ich Sie richtig verstehe, Sie versuchen, die Lage, die Form Posts, dynamisch zu verändern, basierend auf den Eingaben des Formulars?
Sie müssen Javascript verwenden hierfür die Form des Zielattribut zu ändern. Die Begin () für die Form-Tag-Rendering, die von einer HTML-Perspektive statisch ist.
Andere Tipps
Sie könnten versuchen:
<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %>
Güte,
Dan
public ActionResult SearchQuery (string searchQuery)
{
return RedirectToAction (searchQuery, "/Products/Search" );
}
public ActionResult Search (string searchQuery)
{
return View();
}
Wie @Daniel Elliott vorgeschlagen, verwenden Sie BeginRouteForm.Um Ihre URL zu generieren, richtig, Sie haben zu legen Sie die routevalues mit dem gleichen Namen definiert in Ihrer ROUTING-Tabelle.
@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 })
{
}