Domanda

Nella mia applicazione ASP.NET MVC ho il seguente campo di input GET:

<% using (Html.BeginForm("Search", "Products", FormMethod.Get) { %>
   <input type="text" name="searchQuery" id="searchQuery" />
<% } %

Voglio che questo vada sul percorso:

routes.MapRoute("ProductSearchRoute", 
    "Products/Search/{searchQuery}/{pageNumber}", 
new { controller = "Products", action = "Search", pageNumber = 1 });

Il problema è che va a / Products come stringa di query, ad es. Prodotti? SearchQuery = Motoroil. Come ottengo che usi la mia ProductSearchRoute e invece form / Products / Search / Motoroil?

È stato utile?

Soluzione

Se ti capisco correttamente, stai provando a modificare dinamicamente la posizione in cui il modulo pubblica, in base agli input del modulo?

Dovrai usare javascript per questo, per modificare l'attributo target del modulo. BeginForm () serve per il rendering del tag form, che da una prospettiva html, è statico.

Altri suggerimenti

Potresti provare:

<% using (Html.BeginRouteForm("ProductSearchRoute", FormMethod.Get)) %>

La gentilezza,

Dan

public ActionResult SearchQuery (string searchQuery)
{
    return RedirectToAction (searchQuery, "/Products/Search" );
}

public ActionResult Search (string searchQuery)
{
    return View();
}

Come suggerito da @Daniel Elliott, utilizzare BeginRouteForm. Per ottenere la corretta generazione dell'URL, devi impostare i valori di percorso con lo stesso nome definito nella tabella del percorso.

@using (Html.BeginRouteForm("ProductSearchRoute", new { searchQuery= "my query", pageNumber = 1 })
{

}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top