在表单提交后捕获视图模型属性

时间:2010-09-07 12:12:48

标签: c# asp.net-mvc-2

我有一个使用我创建的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));
    }
}

1 个答案:

答案 0 :(得分:1)

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

所以你会得到你的聚光灯对象。

spotlight.PublishDate = s.PublishDate;

但是,由于您的模型具有DateTime,因此日期时间可能会出现问题。 我总是使用FlatSpotlight,其中所有的int和Datetimes都是字符串,然后在模型验证之后可以使用Automapper轻松地映射到Spotlight对象。