尝试更新控制器中的模型以避免验证

时间:2012-08-27 08:26:56

标签: asp.net-mvc model asp.net-mvc-4

我的模型中有以下属性:

[Display(Name = "ActivityModel_FlashFile", ResourceType = typeof(App_GlobalResources.Models))]
[Required(ErrorMessageResourceName = "ActivityModel_FlashFile_Required", ErrorMessageResourceType = typeof(App_GlobalResources.Models))]
public string FlashFile { get; set; }   

在我的控制器中,我做了:

 ModelState.Remove("FlashFile");
 model.FlashFile = "1";
 try
 {
    this.UpdateModel(model);
 }
 catch (Exception ex)
 {
    string allErrors=string.Join(",",ModelState.Values.SelectMany(v => v.Errors).Select(e=>e.ErrorMessage));
 ...

(当我们到达此片段的开头时,FlashFile为空) 然而,此时allErrors是“需要Flash文件”。

(我从here)开始这样做的想法。

如何避免验证FlashFile属性?

1 个答案:

答案 0 :(得分:0)

  

如何避免验证FlashFile属性?

使用适合此视图要求的视图模型。这是正确的方法。如果不需要FlashFile属性,则设计一个视图模型,该模型对此操作没有Required属性。

解决此问题的错误方法是尝试重用您的域模型,然后从模型绑定中排除您不需要的属性:

try
{
    this.UpdateModel(model, null, null, new[] { "FlashFile" });
    model.FlashFile = "1";
}
catch (Exception ex)
{
    string allErrors = string.Join(
        ",", 
        ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)
    );
    ...
}