数据说明,为什么布尔prop.IsRequired总是等于真 [英] Data annotations, why does boolean prop.IsRequired always equal true
问题描述
我有一个包含没有 [必需]
属性的布尔模型
公共BOOL IsOptedIn {搞定;组; }
我已经重写 Object.cshtml
如下,并正在使用 @ Html.EditorForModel()
来生成自己的状态
@ {
VAR性能= ViewData.ModelMetadata.Properties
。凡(道具=> prop.ShowForEdit和放大器;&安培;!ViewData.TemplateInfo.Visited(丙));
}@foreach(在性能VAR道具)
{
变种hasModelStateError = ViewContext.ViewData.ModelState.Any(M => m.Key == prop.PropertyName)
&功放;&安培; ViewContext.ViewData.ModelState [prop.PropertyName] .Errors!= NULL
&功放;&安培; ViewContext.ViewData.ModelState [prop.PropertyName] .Errors.Count> 0;
< DIV CLASS =控制组
@(hasModelStateError错误:?的String.Empty)
@ prop.PropertyName.ToLower()>
@if(prop.IsReadOnly)
{
< B> @ prop.GetDisplayName()< / B>
@ Html.Display(prop.PropertyName)
}
否则,如果(prop.HideSurroundingHtml)
{
@ Html.Editor(prop.PropertyName)
}
其他
{
<标签类=控制标签>
@ prop.GetDisplayName()
@if(prop.IsRequired)
{
<跨度类=必需> * LT; / SPAN>
}
< /标签>
< DIV CLASS =控制>
@ Html.Editor(prop.PropertyName)
@if(hasModelStateError)
{
< p =类警报警报块>
@ Html.ValidationMessage(prop.PropertyName)
&所述; / P>
}
@if(!string.IsNullOrWhiteSpace(prop.Description))
{
< p =班帮助块>
@ prop.Description
&所述; / P>
}
< / DIV>
}
< / DIV>
}
我发现,在我的模型布尔变量的要求总是被标记。这是为什么,我怎么能阻止它的发生?
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = FALSE;
从的Global.asax
将此行添加到您的的Application_Start
方法。默认情况下MVC增加了 [必需]
属性的非空值类型(因为你不能转换空
进入一个布尔
,它必须是一个布尔
)。
I have a model containing a boolean with no [Required]
attribute
public bool IsOptedIn { get; set; }
I have overriden Object.cshtml
as follows and am using @Html.EditorForModel()
to generate my form
@{
var properties = ViewData.ModelMetadata.Properties
.Where(prop => prop.ShowForEdit && !ViewData.TemplateInfo.Visited(prop));
}
@foreach (var prop in properties)
{
var hasModelStateError = ViewContext.ViewData.ModelState.Any(m => m.Key == prop.PropertyName)
&& ViewContext.ViewData.ModelState[prop.PropertyName].Errors != null
&& ViewContext.ViewData.ModelState[prop.PropertyName].Errors.Count > 0;
<div class="control-group
@(hasModelStateError ? "error" : string.Empty)
@prop.PropertyName.ToLower()">
@if (prop.IsReadOnly)
{
<b>@prop.GetDisplayName()</b>
@Html.Display(prop.PropertyName)
}
else if (prop.HideSurroundingHtml)
{
@Html.Editor(prop.PropertyName)
}
else
{
<label class="control-label">
@prop.GetDisplayName()
@if (prop.IsRequired)
{
<span class="required">*</span>
}
</label>
<div class="controls">
@Html.Editor(prop.PropertyName)
@if (hasModelStateError)
{
<p class="alert alert-block">
@Html.ValidationMessage(prop.PropertyName)
</p>
}
@if (!string.IsNullOrWhiteSpace(prop.Description))
{
<p class="help-block">
@prop.Description
</p>
}
</div>
}
</div>
}
I am finding that bools in my model are always being marked as required. Why is this and how can I stop it happening?
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Add this line to your Application_Start
method from Global.asax
. By default MVC adds [Required]
attribute to non-nullable value types (because you can't convert a null
into a bool
, it must be a bool
).
这篇关于数据说明,为什么布尔prop.IsRequired总是等于真的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!