MVC中的动作名称与对应的http动词相同

时间:2015-06-05 01:31:05

标签: c# asp.net-mvc

MVC中的动作方法可以与http动词同名吗?我知道这在Web API中是可行的,但在MVC中不确定。

例如,联系人编辑表单中的帖子会自动调用下面代码中的第二个方法,并且get请求会自动调用第一个方法。

[ActionName("GET")]
public ActionResult EditContact( int contactId )
{
  var contact = DB.RetrieveContact( contactId );
  return View(contact);
}

[ActionName("POST")]
public ActionResult EditContact( Contact contact )
{
  DB.SaveContact( contact );
  return View(contact);
}

更新1

在MVC中,与Web API不同,不能将ActionName设置为http动词,以便在post或get请求上调用正确的方法。需要在视图中的代码和要调用的操作之间创建显式关联,如本文末尾的razor代码所示。

在示例MVC项目中尝试此操作后,我发现上述代码不会自动将发布请求重定向到名为“POST”的方法。我不得不在BeginForm的剃刀代码中明确提到操作名称为POST,或者在处理邮件请求的方法中添加“HttpPost”属性。

因此,需要以下剃刀代码才能使用上述代码。

@Html.ActionLink("Edit Contact Example","GET","Contact", new {contactId = 235}, null)
@using (Html.BeginForm("POST", "Contact"))
{
  <input type="text" id="t1" name="Contact.ContactId" />
  <input type="text" id="t2" name="Contact.ContactName" />
  <input type="text" id="t3" name="Contact.ContactAge" />
  <input type="submit" value="Submit" />
}

1 个答案:

答案 0 :(得分:2)

Yepp,你只需要用[HttpPost]标记你的帖子动作。无论你是否离开[ActionName(“GET”)],第一个都是get方法。