2014-02-06 27 views
0

我有一个CompanyCode是只读的,必须显示给用户。我无法阻止它成为主要关键。我怎样才能防止用户在服务器端更新这个字段?如何防止必须向用户显示更新的主键?

我已经试过如下:

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

然而,这会引发错误,关键领域不能被修改。有没有简单的方法来防止用户更改关键字段或告知实体框架不要尝试更新此字段?

回答

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); 
} 
+0

通过做一个明确的映射 - 'company.Property = model.property',你永远不会更新实体上的PK。你没有告诉你的代码这样做。 – Tommy

0

如果我正确认识你,你必须证明这CompanyCode的UI,只显示在您查看使用@Html.DisplayFor(model => model.CompanyCode)公司代码,而不是EditorFor这使得一个文本框,在这种情况下,如果你呈现一个文本框,这个值将能够被更新。这是否有意义

编辑

如果您需要这回发到服务器,使其@Html.EditorFor(model => model.CompanyCode),只是禁止通过JavaScript这种控制。

+0

但我需要能够在我的模型中回发公司代码。 –

+0

我认为你的意思是'Html.DisplayFor',而不是'Html.LabelFor'。那只会显示属性名称,而不是值。 –

+0

你是对的@ChrisPratt我编辑了我的答案。 –