最好的ASP.NET MVC实践来区分具有相同签名的GET / POST操作方法?

时间:2010-07-02 15:31:01

标签: asp.net-mvc-2 model controller action

在实施修改操作时,我为Get和Post添加了两种方法:编辑(字符串ID)

理想情况下,他们需要具有相同的签名。但当然这不可编辑。所以我给HttpPost方法添加了一个伪参数(在我的例子中是 form ):

[HttpGet]
public ActionResult Edit(string id)
{
    var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
    return View(user);
}

[HttpPost]
public ActionResult Edit(string id, FormCollection form)
{
    var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
    if (TryUpdateModel<User>(user, new[] { "Email", "FullName" }))
    {
        Entities.SaveChanges();
        RedirectToAction("Index");
    }
    return View(user);
}

任何更好/更清晰的方式来实施编辑操作?

4 个答案:

答案 0 :(得分:7)

在控制器中为方法指定一个唯一的名称,例如添加“_POST”作为后缀。然后,您可以使用[ActionName("actualname")]属性使用您的操作使用的名称标记方法。

答案 1 :(得分:-1)

我会将它们组合成一个:

public ActionResult Edit(string id)
{
    if (Request.HttpMethod == "GET") {
        var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
        return View(user);
    }

    // POST logic
}

答案 2 :(得分:-1)

为什么不

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(string id,FormCollection form)  

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(string id)  

这将导致适当的HTTP请求由适当的方法处理

答案 3 :(得分:-1)

帖子应该在IMO模型中具有id:

[HttpGet]
public ActionResult Edit(string id)
{
    var user = Entities.Users.SingleOrDefault(s => s.UserID == id);
    return View(user);
}

[HttpPost]
public ActionResult Edit(User user)
{        
    if (TryUpdateModel<User>(user, new[] { "Email", "FullName" }))
    {
        Entities.SaveChanges();
        RedirectToAction("Index");
    }
    return View(user);
}