c#如何更新特定字段

时间:2014-01-13 10:24:14

标签: c# database asp.net-mvc-4

我是C#的新手,但基本上我们有一个产品表,其中包含来自其他表的许多外键,如供应商,品牌,制造商等。

基本上,我有一个表单,我希望用户能够在同一个屏幕上更新许多产品。

我的目标是真正更新几个字段,而不是更新表中的所有字段。

因此,例如,一个页面中包含10个产品的列表,每个产品都是一个表单,通过ajax提交。一切正常,直到更新。以下是我的内容:

        if (ModelState.IsValid)
        {
            //db.Entry(product).State = EntityState.Modified;

            db.products.Attach(product);
            var entry = db.Entry(product);

            entry.Property(e => e.featured).IsModified = true;

            try
            {
                db.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                        eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                            ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }
        }

然后,我有一个例外“实体类型”产品“处于状态”修改后的“具有以下验证错误:”并列出所有必填字段,如supplier_id,brand_id等。

我觉得我很亲密,但无法理解。被困了近一个星期了。

非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:0)

  

我有一个例外“类型的实体”产品“处于”状态“已修改”   有以下验证错误:“并列出所有必需的   像supplier_id,brand_id等字段。

由于此错误会在您尝试db2.SaveChanges();时提示某些字段未提供,因此可能会null。尝试检查对象的属性,以确保填充所有必需的内容或至少为空。

同样,评论建议您确保将更改保存到您更改的内容上,因此如果您对db进行了更改,则SaveChanges()更改为db

答案 1 :(得分:0)

当您尝试保存更改时,您将丢失有关POST操作的信息。 这是因为您可能在视图表单中没有来自实体的某些属性,因此控制器不知道它的值。 这一切都发生,因为MVC是无国籍的。

最简单的方法是为所有其他不可编辑的属性添加隐藏字段。

@Html.HiddenFor(model => model.Id)

这些字段将包含在POST中,因此,模型绑定器将正确地将它们放入您的实体实例中。

但最佳解决方案是使用视图模型 - 简单的POCO类,它们将成为您视图的模型。不建议直接使用实体模型。 使用视图模型时,您:

  • 可以控制视图上显示的内容,
  • 可以将简单信息传递给您的控制器
  • 只能在模型中具有其他视图特定信息(不在实体中)

因此,当您想显示某些内容时,请将此信息从实体复制到视图模型。在save方法中,您可以使用oposite方式执行此操作,仅更新实体上已更改的属性。

以下是一些信息: http://stephenwalther.com/archive/2009/04/13/asp-net-mvc-tip-50-ndash-create-view-models.aspx