2016-08-25 30 views
0

無法在控制器的[HttpPost]更新操作方法中使用AutoMapper。在ASP.NET MVC中更新從ViewModel到模型的實體跟蹤字段的跟蹤

我有實體跟蹤字段,如CreatedDate,CreatedBy,ModifiedDate,ModifiedBy和我沒有他們作爲我的ViewModel中的字段。

當用戶帖子的形式在更新的操作方法我通常會做這樣的事情:

var product = Mapper.Map<Product>(productViewModel); 

此時跟蹤場爲空。我永遠無法得到它們。

它看起來像我有兩個選擇:

  1. 添加跟蹤場向視圖模型,並在HTML作爲使它們回傳到服務器隱藏字段就像「ID」。

  2. 不是創建新的產品對象,而是基於viewModel.Id從數據庫中檢索產品,然後用viewModel新值手動覆蓋用戶可能已在窗體中編輯的所有值。

有沒有人有任何額外的想法或建議呢?第1步是額外的數據到頁面,我不需要和第2步是一個額外的數據庫調用和不含AutoMapper的不乾淨的代碼。

+1

選項1我會在這種情況下使用。無論如何,你將模型綁定到頁面上,更多的字段不會受到傷害。比另一次訪問數據庫更好!但你是對的,我認爲這是你唯一的選擇。 – garethb

回答

1

我會用選項2

首先停止注射HTML攻擊,用戶可以簡單地編輯您的HTML和改變,你不打算公開的編輯字段。

其次,在編輯或添加字段到基本模型時很難出錯。添加額外的屬性時,您不必擔心在viewModel中需要執行的屬性。

第三,除非它是一個巨大的對象,否則數據庫調用不會增加很多延遲。用戶通常不介意多等一些保存操作,讓他們感到舒服的是,應用程序實際上在做什麼。 :)

+0

沒有考慮到html注入攻擊。非常感謝這個答案! –