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

Asp.net mvc 尝试更新控制器中的模型以避免验证,asp.net-mvc,model,asp.net-mvc-4,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

我的模型中有以下属性:

[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为空)。
然而,此时所有错误都是“需要闪存文件”

(这样做的想法是我从一开始就有的)

如何避免验证FlashFile属性

如何避免验证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)
    );
    ...
}

为什么不把Required从FlashFile属性中去掉呢?在某些情况下我需要它(最初我在IF语句中为FlashFile指定了一个“人工”值,但为了解决这个问题,我简化了这个值)。我还需要它用于客户端验证如果您在某些情况下需要它,那么您的情况最适合ViewModel模式(请参阅此处的更多内容:)令人惊讶的是,这会产生完全相同的错误。我不知道怎么可能。。。。(至于创建一个新模型——验证取决于用户的选择,而用户的选择(目前)不涉及服务器端发送新视图或任何类似的内容)。