2014-02-06 30 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我編輯了我的答案。 –