MVC3如何在TryUpdate之前修改传入的模型?

时间:2012-08-13 15:06:09

标签: asp.net-mvc value-provider

这应该很简单,但我没有看到它,所以我希望有人可以提供帮助(我的所有帖子都可能以这种方式开始)。所以我有一个模型进入控制器。

[HttpPost]
public ActionResult Index(Policy screenModel)

我想在更新之前做一些特定于该模型的事情,例如:

If (condition)
    screenModel.AgentNumber = 1000;

现在我需要在TryUpdateModel或ModelState.IsValid触发之前将screenModel返回到ValueProvider,否则更改不会执行任何操作。如果我在方法中接受FormCollection,我可以简单地这样做:

this.ValueProvider = collection.ToValueProvider();

但是还有其他原因我没有使用FormCollection。如何将对象重新放回ValueProvider?

1 个答案:

答案 0 :(得分:1)

首先,在使用模型作为参数传递的方法时,不应该调用TryUpdateModel或UpdateModel。这些基本上在调用方法之前执行UpdateModel。

其次,UpdateModel旨在将FormsCollection中的对象复制到模型中,它将覆盖您放在那里的任何内容。

第三,ModelState也在调用方法之前更新。

如果你想做这类事情,那么自定义模型绑定器可能就是这样。