2016-07-10 33 views
0

當想從「後端」填充某些模型值時,使用什麼樣的設計範例?例如我有電影DB;用戶可以創建電影。我想記錄誰創建了電影,CreateOn,LastModified。我的模型有UserId,CreatedOn,LastModified,...(名字,流派等)。生成的默認視圖具有所有這些字段;我從創建視圖中刪除了CreatedOn,LastModified,UserId;現在當事情回到控制器中的創建功能時,模型無效。我通過清除功能清除了模型錯誤,然後在控制器中填入這3個值。但是,這是不對的;清除清除任何其他驗證錯誤。MVC在控制器中填寫值

public ActionResult Create([Bind(Include = "Name,Description,Genre")] Movie movie) 
{ 
    ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId()); 

    ModelState.Clear(); 
    movie.UserId = user.Id; 
    movie.CreatedOn = DateTime.UtcNow; 
    movie.LastModified = DateTime.UtcNow; 


    if (ModelState.IsValid) 
    { 
     db.Movies.Add(movie); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    return View(movie); 
} 
+0

你能展示你的模型以及你會得到的錯誤嗎?可能會有很多事情發生:缺少必需的字段,在檢查「ModelState.IsValid」之前映射屬性(其中一個屬性可能*不是有效的)等等。 –

+0

[有沒有辦法忽略在ASP.NET MVC3中驗證表單時的一些屬性(在POCO上)?](http://stackoverflow.com/questions/5209252/is-there-any-way-to-ignore-some-properties-on-a -poco-when-validationating-a-in-in) –

+0

編輯時總是使用視圖模型 - [MVC中的ViewModel是什麼?](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in- mvc) –

回答

0

從設計的角度來看,你應該創建一個專門針對視圖,然後控制器上的專用模型,填充與被髮送到客戶端,你需要保存到其他值數據的現有模型數據庫(即CreateOn,LastModified等)。

希望它有幫助!

+0

它確實;儘管我必須在視圖中顯示CreateOn,LastModified;只在創作中我不想展示它。我將爲創建和編輯創建一個新模型。 – Amit

+0

你總是可以使用HiddenFor擴展方法來「解決」,但它很醜。在我看來,創建一個專用模型是正確的選擇。 –