2

1つの作成ページに2つの別々のフォームを配置し、フォームごとにコントローラーに1つのアクションを配置したいと思います。

ビューで:

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

コントローラ内:

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

結果"The current request for action 'MyMethod' on controller type 'MyController' is ambiguous between the following action methods"-エラーまたは間違った作成アクションが呼び出されます。

ソリューション?

  • これら2つのPOSTCreateアクションを1つのパブリックに結合しますActionResult Create(Product product, string genericInput);
  • POST作成アクションの1つに別の名前を付け、対応するアクションに新しい名前を追加しますHtml.BeginForm()

これらの注意点が何であるかわかりません。これをどのように解決しますか?

4

2 に答える 2

3

引数のタイプのみが異なる同じ名前と動詞の2つのアクションを持つことはできません。2つのアクションに異なる名前を付けるIMHOは、それらが異なるタスクを実行し、異なる入力を受け取ると想定することをお勧めします。

于 2010-07-25T19:21:32.383 に答える
1

実際、BeginForm() 呼び出しをより具体的にすれば、これを実行できると思います。

Using(Html.BeginForm<ControllerName>(c => c.Create((Product)null)) { } 
Using(Html.BeginForm<ControllerName>(c => c.Create((string)null)) { }
于 2010-08-30T18:00:01.030 に答える