2010-09-07 83 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对象。