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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top