Tom*_*Tom 2 asp.net asp.net-mvc data-annotations asp.net-mvc-4
我有一个包含没有[Required]属性的布尔值的模型
public bool IsOptedIn { get; set; }
Run Code Online (Sandbox Code Playgroud)
我已经覆盖Object.cshtml如下,并@Html.EditorForModel()用于生成我的表单
@{
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>
}
Run Code Online (Sandbox Code Playgroud)
我发现模型中的bool总是被标记为必需.为什么这样,我怎么能阻止它发生?
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Run Code Online (Sandbox Code Playgroud)
将此行添加到您的Application_Start方法中Global.asax.默认情况下,MVC将[Required]属性添加到非可空值类型(因为您无法将a转换null为a bool,它必须是a bool).
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |