Come supportare più moduli che indirizzano lo stesso creazione di azioni sulla stessa pagina?
-
29-09-2020 - |
Domanda
Voglio avere due moduli separati su una singola pagina Creazione e un'azione nel controller per ogni modulo.
Nella vista:
<% using (Html.BeginForm()) { %>
// Contents of the first (EditorFor(Model.Product) form.
<input type="submit" />
<% } %>
<% using (Html.BeginForm()) { %>
// Contents of the second (generic input) form.
<input type="submit" />
<% } %>
.
Nel controller:
// Empty for GET request
public ActionResult Create() {
return View(new ProductViewModel("", new Product()));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Product product) {
return View(new ProductViewModel("", product));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string genericInput) {
if (/* problems with the generic input */) {
ModelState.AddModelError("genericInput", "you donkey");
}
if (ModelState.IsValid) {
// Create a product from the generic input and add to database
return RedirectToAction("Details", "Products", new { id = product.ID });
}
return View(new ProductViewModel(genericInput, new Product()));
}
.
Risultati in "The current request for action 'MyMethod' on controller type 'MyController' is ambiguous between the following action methods"
- Errore o l'azione Creazione errata è chiamata.
Soluzioni?
- .
- Combina quei due post creano azioni
in un unico
ActionResult Create(Product product, string genericInput);
- Nome uno del post Creazioni creazioni in modo diverso e aggiungi il nuovo nome al corrispondente
Html.BeginForm()
Non ho idea di quali sono gli avvertimenti in questi.Come risolveresti questo?
Soluzione
In realtà, credo che tu possa farlo se sei più specifico con la tua chiamata BeginForm ().
Using(Html.BeginForm<ControllerName>(c => c.Create((Product)null)) { }
Using(Html.BeginForm<ControllerName>(c => c.Create((string)null)) { }
. Altri suggerimenti
Non è possibile avere due azioni con lo stesso nome e verbo che differiscono solo con i tipi di argomenti.Imho nominando le tue due azioni in modo diverso sarebbe una buona idea assumendo che svolgere compiti diversi e prendono ingressi diversi.