加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 04:07:18 所属栏目:asp.Net 来源:网络整理
导读:我在文章,书籍和例子中看到过许多创建动作的例子.似乎有两种流行的风格. [AcceptVerbs(HttpVerbs.Post)] public ActionResult Create(FormCollection collection) { try { var contact = Contact.Create(); UpdateModelContact(contact); contact.Save(); re
我在文章,书籍和例子中看到过许多创建动作的例子.似乎有两种流行的风格.
[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();
    }

}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读