C# 仅更新所需字段mvc EF

C# 仅更新所需字段mvc EF,c#,asp.net-mvc,entity-framework,razor,C#,Asp.net Mvc,Entity Framework,Razor,我的代码是这样的 模型 控制器 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit([Bind(Include="DepartmentID,Name,CreatedUser,CreatedDate")] Department department) { if (ModelState.IsValid) { db.Entry(department

我的代码是这样的 模型

控制器

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include="DepartmentID,Name,CreatedUser,CreatedDate")] Department department)
    {
        if (ModelState.IsValid)
        {
            db.Entry(department).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(department);
    }
查看(编辑)

@model diagnosisp.Models.Department
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model=>model.DepartmentID)
@Html.TextBoxFor(model=>model.Name,新的{@class=“form control”,@placeholder=“Enter Department Name”})
拯救
}

正如您在视图中看到的,我只想更新
Name
字段,但当我运行代码时,表中的所有字段都会更新。对于我没有添加值的列,会使用null更新。有人能指出我做错了什么吗?

我想你做错了的是忘记将实体附加到上下文中。当然,模型对象并没有所有的属性。因此,它的模型绑定器为那些未在UI中呈现的属性发送默认值

           if (ModelState.IsValid)
            {
                db.Department.Attach(department);
                db.Entry(department).Property(x => x.name).IsModified = true;
                db.SaveChanges();
                return RedirectToAction("Index");
            }

这是因为您的UI模型没有呈现所有字段。因此,对于那些未在UI模型绑定中使用的属性,发送空值从数据库中设置现有项,根据发布的值更新其
名称
,并保存原始项。注意:您可以从
[Bind(Include…)
中删除
CreatedUser、CreatedDate
,在UI中呈现不需要的字段是一种好做法吗?难道没有其他方法可以克服这个问题吗?可能在控制器逻辑内部?不,不是。我张贴了一个答案很快更新只有一个property@StephenMuecke我还没有完全理解你说的话。你能把它作为一个答案吗?你所说的[你的实体名称]是什么意思。我已经在问题中发布了我的完整代码。你能指出我需要用什么替换它吗?更新的答案请看一看请标记答案以便社区获得帮助:)
    @model DiagnosisApp.Models.Department

@using (Html.BeginForm())
{
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
        @Html.HiddenFor(model => model.DepartmentID)
        @Html.TextBoxFor(model => model.Name, new { @class = "form-control", @placeholder = "Enter Department Name" })
        <button type="submit" value="Save" >Save</button>

}
           if (ModelState.IsValid)
            {
                db.Department.Attach(department);
                db.Entry(department).Property(x => x.name).IsModified = true;
                db.SaveChanges();
                return RedirectToAction("Index");
            }