Pregunta

Quiero tener dos formularios separados en una sola página de creación y una acción en el controlador para cada formulario.

En la 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" />
<% } %>

En el controlador:

// 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()));
}

Resultados en "The current request for action 'MyMethod' on controller type 'MyController' is ambiguous between the following action methods" - error o se llama a la acción Crear incorrecta.

¿Soluciones?

  • Combine esas dos publicaciones Crear acciones en un público ActionResult Create(Product product, string genericInput);
  • Asigne un nombre diferente a una de las acciones POST Create y agregue el nuevo nombre a la acción correspondiente. Html.BeginForm()

No tengo idea de cuáles son las advertencias en estos.Como resolverias esto?

¿Fue útil?

Solución

En realidad, creo que puedes hacer esto si eres más específico con tu llamada a BeginForm().

Using(Html.BeginForm<ControllerName>(c => c.Create((Product)null)) { } 
Using(Html.BeginForm<ControllerName>(c => c.Create((string)null)) { }

Otros consejos

No puedes tener dos acciones con el mismo nombre y verbo que difieran sólo en los tipos de argumento.En mi humilde opinión, sería una buena idea nombrar sus dos acciones de manera diferente, suponiendo que realizan diferentes tareas y reciben diferentes aportes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top