我正在尝试建立一个简单的测试网站,允许我使用MVC4列出,创建,编辑和删除客户对象。
在我的控制器中,我有2个创建方法,当窗体加载控件时获取Get,以及实际保存数据的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方法之间的区别,但我添加了属性。可能是什么原因以及如何让它再次发挥作用?
答案 0 :(得分:2)
MVC不会授权您使用两个具有相同名称的操作方法。
但是当http动词不同(GET,POST)时,你可以有2个具有相同URI的动作方法。使用ActionName属性设置操作名称。不要使用相同的方法名称。您可以使用任何名称。惯例是将http动词添加为方法后缀。
[HttpPost]
[ActionName("Create")]
public ActionResult CreatePost(Customer cust)
{
if (ModelState.IsValid)
{
_repository.Add(cust);
return RedirectToAction("GetAllCustomers");
}
return View(cust);
}