2010-09-07 84 views
0

我有一個使用我創建的視圖模型的強類型視圖。我在我的viewmodel中有一個日期字段,它是我的主要模型的一個屬性的格式化顯示。在POST編輯動作中(我遵循書呆子晚餐教程)參數是int id, FormCollection collection。使用我的存儲庫查找ID的模型,我留下來使用FormCollection捕獲我的附加viewmodel屬性。一定會有更好的辦法?也許只是修改參數來接受我的viewmodel而不是int id?爲什麼沒有書呆子晚餐這樣做,而不是依賴於UpdateModel()?我的UpdateModel是否不正確,因爲沒有拾取視圖模型屬性並進行相應更新?表單提交後捕獲視圖模型屬性

下面的示例。 ValidateInput(假)是爲我的WYSIWYG編輯器

[Authorize(Roles = "Author,Admin"), HttpPost, ValidateInput(false)] 
public virtual ActionResult Edit(int id, FormCollection collection) 
{ 
    Spotlight spotlight = spotlightRepository.GetSpotlight(id); 

    try 
    { 
     spotlight.ModifiedDate = DateTimeOffset.Now; 
     // I dont like this line 
     spotlight.PublishDate = Convert.ToDateTime(collection["PublishDate"]); 
     UpdateModel(spotlight, "Spotlight"); 

     spotlightRepository.Save(); 

     return RedirectToAction("Details", new { id = spotlight.SpotlightID }); 
    } 
    catch 
    { 
     ModelState.AddRuleViolations(spotlight.GetRuleViolations()); 

     return View(new SpotlightFormViewModel(spotlight)); 
    } 
} 

回答

1
public virtual ActionResult Edit(int id, FormCollection collection, Spotlight s) 

所以你會得到你的返回聚光燈對象。

spotlight.PublishDate = s.PublishDate; 

但是,日期時間可能是一個問題,因爲您的模型帶有DateTime。 我總是使用FlatSpotlight,其中所有整數和日期時間都是字符串,然後可以在模型驗證課程之後輕鬆將其與Automapper映射到Spotlight對象。