pol*_*ata 0 validation data-annotations asp.net-mvc-3
我有以下ViewModel(只显示一些易于阅读的属性)
public class Contract{
public string Name {get; set;}
public ContractTerm PrpTerm { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
PRP Term模型就是这样的
public class PrpTerm{
public int Id {get; set;}
public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
对于我的模型验证,我正在使用XML文件来注入注释.我已经Name根据需要设置了属性,我ContractTerm没有指定任何验证(它是列表中的可选字段).我的观点是名称的文本框和合同条款的选择列表.
当我试图保存时,我将该ModelState.IsValid属性视为false,表示该PRPTerm.Id值是必需的.据我所知,因为我们无法为int赋值空值.
有人知道一种方法可以避免这种情况得到验证吗?
我尝试过使用Bind(Exclude annotation,但这会从数据提交中删除该字段,这不允许我获取用户选择的值(如果发生这种情况).我无法在PrpClass上将id设置为可为空另一个选项是在ViewModel上设置PrpTerm Id,但我需要用有效的理由来证明这种改变.
任何的想法?
隐式[Required]属性应用于,Id因为它是一个int定义为不可空的(与int?可以为空的相对).
此行为可在MVC中使用
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes
默认为true.
您可以通过在Global.asax.cs中将其设置为false来禁用此行为
然而,正如AFinkelstein所指出的,听起来真正的问题在于你的ViewModel.我建议你重新考虑一下,而不是关闭这个方便的MVC默认值.
我会建议
public class Contract
{
public string Name { get; set; }
public int? PrpTermId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
可能是你真正想要的.就这样做的"正当理由"而言 - 通常认为您的ViewModel通常会与您的模型不同,因为给定ViewModel的目的可能与它所构成的模型的目的略有不同.
| 归档时间: |
|
| 查看次数: |
3635 次 |
| 最近记录: |