Comment prendre en charge plusieurs formes qui ciblent les mêmes Créer l'action sur la même page?
-
29-09-2020 - |
Question
Je veux avoir deux formulaires distincts sur une seule page créer et d'une action dans le contrôleur pour chaque forme.
Dans la vue:
<% 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" />
<% } %>
Dans le contrôleur:
// 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()));
}
Résultats dans "The current request for action 'MyMethod' on controller type 'MyController' is ambiguous between the following action methods"
- erreur ou la mauvaise action de création est appelée.
Des Solutions?
- Combiner ces deux POSTES de Créer des actions
dans un publique
ActionResult Create(Product product, string genericInput);
- Le nom de l'un des POSTES de Créer des actions différemment et ajouter le nouveau nom du correspondant
Html.BeginForm()
Je n'ai aucune idée de ce que sont les mises en garde dans ces.Comment voulez-vous résoudre ce problème?
La solution
En fait, je crois que vous pouvez le faire si vous sont plus spécifiques à votre BeginForm() de l'appel.
Using(Html.BeginForm<ControllerName>(c => c.Create((Product)null)) { }
Using(Html.BeginForm<ControllerName>(c => c.Create((string)null)) { }
Autres conseils
Vous ne pouvez pas avoir deux actions avec le même nom et du verbe qui diffèrent uniquement avec les types d'argument.À mon humble avis de nommage de vos deux actions différemment serait une bonne idée en supposant qu'ils effectuent différentes tâches et prendre différentes entrées.