我正在使用MVC3和EF4編寫Web應用程序。我使用下面的動作頭來捕獲用戶提交的表單值。如何防止用戶修改表單上的某些字段?
<HttpPost()>
Public Function Edit(ByVal prod as Product) As ActionResult
我使用下面的代碼來更新記錄。
db.Attach(prod)
db.ObjectStateManager.ChangeObjectState(prod, EntityState.Modified)
db.SaveChanges()
我得到prod對象中提交的值,我在數據庫中更新。問題是有些用戶不允許修改產品中的某些字段,比如ProductCost。我禁用了HTML中這些字段的文本框。但由於它是客戶端,用戶可以使用Firebug等工具輕鬆啓用它並修改其值。
我能想出的唯一解決方案是從數據庫中檢索現有記錄,並將其ProductCost值複製到prod.ProductCost中。但我不喜歡解決這個問題。有沒有更好的方法來實現這一目標?
編輯:我發現下面的鏈接來更新特定的字段。 How to update only one field using Entity Framework?
您可以使用下面的代碼來修改特定的字段。
context.ObjectStateManager.GetObjectStateEntry(user).SetModifiedProperty("FieldName");
現在的問題是,我必須爲用戶能夠修改的每個字段編寫上述語句嗎?如果是,假設產品模型有10個字段(1個主鍵),並且允許用戶修改除主鍵以外的所有鍵,我需要寫9條語句有沒有一種方法可以一次指定多個屬性。或者甚至更好的是指定未修改的屬性。 (注意:我知道我可以對一個字段名稱進行循環,以避免寫出9條語句,我要求一種替代方法,而不是重構上述內容)
我用下面的代碼更新記錄的方法。 db.Attach(模型) db.ObjectStateManager.ChangeObjectState(型號,EntityState.Modified) db.SaveChanges() 我的上下文對象不具有像的UpdateProduct任何方法。 – Cracker
@Cracker您必須從db中加載現有產品,然後(基於usertype)只更新用戶有權訪問的字段。這就是Shyju的repo.UpdateProduct(...)會在幕後做的事。 – ZippyV
好的..那麼我已經知道這種方法..我要求的替代品 – Cracker