2

MVC4を使用して顧客オブジェクトを一覧表示、作成、編集、および削除できるようにするための簡単なテストWebサイトを作成しようとしています。

コントローラー内には、2つの作成メソッドがあります。1つはフォームがコントロールとともに読み込まれるときのGetで、もう1つは実際にデータを保存するPostです。

    //
    // GET: /Customer/Create

    [HttpGet]
    public ActionResult Create()
    {
        return View();
    }

    //
    // POST: /Customer/Create

    [HttpPost]
    public ActionResult Create(Customer cust)
    {
        if (ModelState.IsValid)
        {
            _repository.Add(cust);
            return RedirectToAction("GetAllCustomers");
        }

        return View(cust);
    }

ただし、プロジェクトを実行して作成アクションにアクセスしようとすると、次のエラーが発生します。

The current request for action 'Create' on controller type 'CustomerController' is ambiguous between the following action methods:
System.Web.Mvc.ActionResult Create() on type [Project].Controllers.CustomerController
System.Web.Mvc.ActionResult Create([Project].Models.Customer) on type [Project].Controllers.CustomerController

GetメソッドとPostメソッドの違いがわからないことは理解していますが、属性を追加しました。これの原因は何である可能性があり、どうすればそれを再び機能させることができますか?

4

1 に答える 1

2

MVC は、同じ名前の 2 つのアクション メソッドを持つことを許可しません。

ただし、http 動詞が異なる場合 (GET、POST)、同じ URI で 2 つのアクション メソッドを使用できます。アクション名を設定するには、ActionName 属性を使用します。同じメソッド名を使用しないでください。任意の名前を使用できます。http動詞をメソッド接尾辞として追加するのが慣例です。

[HttpPost]
[ActionName("Create")]
public ActionResult CreatePost(Customer cust)
{
    if (ModelState.IsValid)
    {
        _repository.Add(cust);
        return RedirectToAction("GetAllCustomers");
    }

    return View(cust);
}
于 2012-10-18T21:24:31.697 に答える