我有两个动作,一个接受ViewModel,一个接受两个参数,一个字符串和一个int,当我尝试发布到动作时,它给了我一个错误,告诉我当前请求在两者之间是不明确的动作。
是否可以向路由系统指明哪个操作是相关的,以及它是如何完成的?
答案 0 :(得分:3)
你可以用HttpGet HttpPost来装饰它
查看“覆盖HTTP方法动词”
http://www.asp.net/learn/whitepapers/what-is-new-in-aspnet-mvc
您还可以使用ActionName属性。查看“ActionNameAttribute”
http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx
答案 1 :(得分:1)
You can't overload controller actions,尽管Raj说,你可以通过允许他们回应不同的请求(获取,发布等)来区分他们。
您可能还会发现这有用:How a Method Becomes An Action。
答案 2 :(得分:1)
简化示例:
[HttpGet] // this attribute is't necessary when there are only 2 actions with the same name
public ActionResult Update(int id)
{
return View(new Repository().GetProduct(id));
}
[HttpPost]
public ActionResult Update(int id, Product product)
{
// handle POST data
var repo = new Repository();
repo.UpdateProduct(product);
return RedirectToAction("List");
}
如果您需要两个具有完全相同的签名(相同名称和相同类型的相同数量的参数)的操作,那么您将不得不使用其他属性,例如这样:
public ActionResult SomeAction(int id)
{
return View(new Repository().GetSomething(id));
}
[HttpPost]
[ActionName("SomeAction")]
public ActionResult SomeActionPost(int id)
{
// handle POST data
var repo = new Repository();
repo.UpdateTimestamp(id);
return View(repo.GetSomething(id));
}