如何防止我必须向用户显示的主键更新?

时间:2014-02-06 15:47:01

标签: asp.net-mvc entity-framework entity-framework-5

我有一个只读的CompanyCode,必须向用户显示。我没有发言权阻止这成为主键。如何阻止用户在服务器端更新此字段?

我尝试了以下内容:

company.Property(s => s.CompanyCode).IsModified = false;

但是,这会抛出一个错误,即无法修改关键字段。是否有一种简单的方法可以阻止用户更改密钥字段或告知实体框架不要尝试更新此字段?

2 个答案:

答案 0 :(得分:2)

您应始终始终始终使用发布的值更新从数据库中提取的实体,而不是将发布的版本直接保存到数据库中。因此,您需要做的就是在URL中传递id:

public ActionResult Edit(int id, CompanyViewModel model)
{
    var company = db.Companies.Find(id);
    if (company == null)
    {
        return new HttpNotFoundResult();
    }

    if (ModelState.IsValid)
    {
        // map `model` properties to `company` properties
        db.Entry(company).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(model);
}

答案 1 :(得分:0)

如果我理解正确,并且您必须在用户界面上显示此CompanyCode,只需在您的视图上使用@Html.DisplayFor(model => model.CompanyCode)显示公司代码,而不是EditorFor文本框在这种情况下,如果渲染文本框,则可以更新此值。这是否有意义

修改

如果您需要将其发回服务器,请将其设为@Html.EditorFor(model => model.CompanyCode),然后通过JavaScript禁用此控件。