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模式(请参阅此处的更多内容:)令人惊讶的是,这会产生完全相同的错误。我不知道怎么可能。。。。(至于创建一个新模型——验证取决于用户的选择,而用户的选择(目前)不涉及服务器端发送新视图或任何类似的内容)。