Wie unterstützt man mehrere Formulare, die auf dieselbe Aktion „Erstellen“ auf derselben Seite abzielen?
-
29-09-2020 - |
Frage
Ich möchte zwei separate Formulare auf einer einzelnen Erstellungsseite und eine Aktion im Controller für jedes Formular haben.
In der Ansicht:
<% 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" />
<% } %>
Im 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()));
}
Ergebnisse in "The current request for action 'MyMethod' on controller type 'MyController' is ambiguous between the following action methods"
- Fehler oder die falsche Create-Aktion wird aufgerufen.
Lösungen?
- Kombinieren Sie diese beiden Beitrag, die Aktionen in einer Öffentlichkeit schaffen
ActionResult Create(Product product, string genericInput);
- Benennen Sie eine der POST Create-Aktionen anders und fügen Sie den neuen Namen dem entsprechenden hinzu
Html.BeginForm()
Ich habe keine Ahnung, welche Vorbehalte darin bestehen.Wie würden Sie das lösen?
Lösung
Tatsächlich glaube ich, dass Sie dies tun können, wenn Sie bei Ihrem BeginForm()-Aufruf genauer vorgehen.
Using(Html.BeginForm<ControllerName>(c => c.Create((Product)null)) { }
Using(Html.BeginForm<ControllerName>(c => c.Create((string)null)) { }
Andere Tipps
Sie können nicht zwei Aktionen mit demselben Namen und Verb haben, die sich nur durch die Argumenttypen unterscheiden.Meiner Meinung nach wäre es eine gute Idee, Ihre beiden Aktionen unterschiedlich zu benennen, vorausgesetzt, sie führen unterschiedliche Aufgaben aus und nehmen unterschiedliche Eingaben entgegen.