2011-02-14 141 views
1

我有一个视图绑定到ViewModel与DataAnnotations进行验证,我有一个与模型输入参数(ModelBinding)的动作。我的代码看起来像......MVC模型验证

public ActionResult MyMethod (MyModelDefinition model, string ddlValue){ 
    if (ModelState.IsValid) { return RedirectToAction ("...");} 

    // If my model is not valid i want to change it and return the View Again... 
    model.field1 = "xpto"; 

    return View(model); 
} 

当我这样做,我有验证错误(即使在我的字段1女巫是需要一个和我填满它被渲染我查看之前)。

我失踪了什么?

谢谢ü所有..

回答

2

你需要从模型状态删除该值,如果你打算修改它的控制器,或当你渲染视图您已经用于呈现此值的HTML助手将首先查看POST的值,然后在模型中查看。这是预期的行为。

[HttpPost] 
public ActionResult MyMethod(MyModelDefinition model, string ddlValue) 
{ 
    if (ModelState.IsValid) 
    { 
     return RedirectToAction ("..."); 
    } 

    // Remove field1 from ModelState if you intend to 
    // modify it in the controller 
    ModelState.Remove("field1"); 
    model.field1 = "xpto"; 
    return View(model); 
}