我有一个使用我创建的viewmodel的强类型视图。我的viewmodel中有一个日期字段,它是我主模型属性的格式化显示。在POST Edit操作(我跟着书呆子晚餐教程)参数是int id, FormCollection collection
。使用我的存储库我从ID中查找模型,然后我将使用FormCollection捕获我的其他viewmodel属性。肯定有更好的办法?也许只是修改参数来接受我的viewmodel而不是int id?为什么书呆子晚餐没有这样做而不依赖于UpdateModel()?我的UpdateModel是否因为没有获取视图模型属性并相应更新而不正确?
以下示例。 ValidateInput(false)适用于我的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));
}
}
答案 0 :(得分:1)
public virtual ActionResult Edit(int id, FormCollection collection, Spotlight s)
所以你会得到你的聚光灯对象。
spotlight.PublishDate = s.PublishDate;
但是,由于您的模型具有DateTime,因此日期时间可能会出现问题。 我总是使用FlatSpotlight,其中所有的int和Datetimes都是字符串,然后在模型验证之后可以使用Automapper轻松地映射到Spotlight对象。