いくつかのブールオブジェクトを含むモデルがあります
[DisplayName("Is student still at school")]
//[ValidBoolDropDown("IsStillAtSchool")]
public bool? IsStillAtSchool { get; set; }
いくつかのboolエディタードロップダウンテンプレートで実装されています
@model bool?
@{
int intTabIndex = 1;
if (ViewData["tabindex"] != null)
{
intTabIndex = Convert.ToInt32(ViewData["tabindex"]);
}
}
@{
string strOnChange = "";
if (ViewData["onchange"] != null)
{
strOnChange = ViewData["onchange"].ToString();
}
}
<div class="editor-field">
@Html.LabelFor(model => model):
@Html.DropDownListFor(model => model, new SelectListItem[] { new SelectListItem() { Text = "Yes", Value = "true", Selected = Model == true ? true : false }, new SelectListItem() { Text = "No", Value = "false", Selected = Model == false ? true : false }, new SelectListItem() { Text = "Select", Value = "null", Selected = Model == null ? true : false} }, new { @tabindex = intTabIndex, @onchange = strOnChange })
@Html.ValidationMessageFor(model => model)
</div>
投稿では、デフォルトのモデル検証エラーが発生します
値「null」は、Is Studentstill at school(別名IsStillatSchool)には無効です。
カスタムValidationAttributeも実装しました
public class ValidBoolDropDown : ValidationAttribute
{
public ValidBoolDropDown(string dropdownname) :base("Please Select for {0}")
{
DropDownName = dropdownname;
}
private string DropDownName;
protected override ValidationResult IsValid(object value,ValidationContext validationContext)
{
var boolres = GetBool(validationContext);
//if (!boolres.HasValue)
//{
// return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
//}
return ValidationResult.Success;
}
public override string FormatErrorMessage(string name)
{
return string.Format(ErrorMessageString, name);
}
protected bool? GetBool(ValidationContext validationContext)
{
var propertyInfo = validationContext
.ObjectType
.GetProperty(DropDownName);
if (propertyInfo != null)
{
var boolValue = propertyInfo.GetValue(validationContext.ObjectInstance, null);
if (boolValue == null)
return null;
return boolValue as bool?;
}
return null;
}
}
これは発生しますが上書きされ、この属性のModel.Value.Errorは引き続き失敗します
Glocal.asxの値型の自動必須フラグをオフにすることについていくつか見ました
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
しかし、これは機能していません。アプリのカスタムMetadataValidatorProviderを作成する場合ですか、それとも何か他のことが起こっていますか。
Adavanceに感謝します