Pergunta

Quero ter dois formulários separados em uma única página de criação e uma ação no controlador para cada formulário.

Na visão:

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

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

Resulta em "The current request for action 'MyMethod' on controller type 'MyController' is ambiguous between the following action methods" - erro ou a ação Criar errada é chamada.

Soluções?

  • Combine essas duas postagens, crie ações em um público ActionResult Create(Product product, string genericInput);
  • Nomeie uma das ações POST Create de forma diferente e adicione o novo nome ao correspondente Html.BeginForm()

Não tenho ideia de quais são as advertências nisso.Como você resolveria isso?

Foi útil?

Solução

Na verdade, acredito que você pode fazer isso se for mais específico com sua chamada BeginForm().

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

Outras dicas

Você não pode ter duas ações com o mesmo nome e verbo que diferem apenas nos tipos de argumentos.IMHO nomear suas duas ações de maneira diferente seria uma boa ideia, presumindo que elas executam tarefas diferentes e recebem informações diferentes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top