asp.net-mvc – 哪个更正确:使用UpdateModel()或接收模型作为参数?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 哪个更正确:使用UpdateModel()或接收模型作为参数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@
我在文章,书籍和例子中看到过许多创建动作的例子.似乎有两种流行的风格.
[AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Create(FormCollection collection)
 {
     try
     {
         var contact = Contact.Create();
         UpdateModel<Contact>(contact);
         contact.Save();
         return RedirectToAction("Index");
     }
     catch (InvalidOperationException ex)
     {
         return View();
     }
 }

和…

[AcceptVerbs(HttpVerbs.Post)]
 public ActionResult Create([Bind(Exclude="Id")]Contact contact)
 {
     try
     {
         contact.Save();  // ... assumes model does validation
         return RedirectToAction("Index");
     }
     catch (Exception ex)
     {
         // ... have to handle model exceptions and populate ModelState errors
         // ... either here or in the model's validation
         return View();
     }
 }

我已经尝试了两种方法,并且都有优点和缺点,IMO.

例如,当使用FormCollection版本时,我必须在我的模型绑定器中手动处理“Id”,因为绑定/排除在此处不起作用.使用方法的类型化版本,我根本不能使用模型绑定器.我喜欢使用模型绑定器,因为它允许我填充ModelState错误,而不需要在模型的验证代码中了解ModelState.

任何见解?

更新:
我回答了我自己的问题,但是如果有人有更好的答案,我不会将其标记为几天.

解决方法

如果要更新已存在的模型对象,可以使用UpdateModel,您可以从数据库获取该模型对象,或者希望以某种特定方式实例化模型对象

例如:

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditEmployee(int id,FormCollection collection)
    {

try
     {

    Contact contact = repository.getContact(id);
    UpdateModel(contact,collection.ToValueProvider());
    repository.save();
    return RedirectToAction("Index");

}

    catch
    {
    //Handle 
    return View();
    }

}

如果您没有上述要求,请将其作为操作参数.

猜你在找的asp.Net相关文章