DataAnnotations . , DataAnnotation .
Html.EditorFor, ModelMetadata , , ModelValidators, . ModelValidators 'data-val- *' HTML.
Html.EditorFor ( ), ModelMetadata Validators - ModelMetadata, MyField - "RegularExpression" . ModelMetadata Validators . ModelMetadata , Validators. , HTML.
, , , Validator, "MyField" .
- ModelMetadataProvider DataAnnotationsModelMetadataProvider
- GetValidators 'DataAnnotationsModelValidatorProvider'
1
@model System.Collections.Generic.IEnumerable<object>
@{
ViewBag.Title = "Collection";
var modelMetadata = this.ViewData.ModelMetadata;
var validators = modelMetadata.GetValidators(ViewContext).ToList();
ViewContext.HttpContext.Items["rootValidators"] = validators;
}
@foreach (var item in Model)
{
@Html.EditorFor(m => item)
}
, , . . HttpContext.Items ModelValidatorProvider.
2 - Global.asax -
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new DAModelValidatorProvider());
ModelMetadataProviders.Current = new CachedDataAnnotationsModelMetadataProvider();
3 - ModelValidatorProvider, GetValidators,
public class DAModelValidatorProvider : DataAnnotationsModelValidatorProvider
{
protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
var validators = base.GetValidators(metadata, context, attributes).ToList();
var rootValidators = context.HttpContext.Items["rootValidators"] as IEnumerable<ModelValidator>;
if (rootValidators != null)
{
foreach (var rootValidator in rootValidators)
{
validators.Add(rootValidator);
}
}
return validators;
}
}
3 . , Html.EditorFor Html.TextBoxFor. Html.EditorFor, , , . , . https://github.com/swazza85/Stackoverflow, , . , , , , , , .
Cheers,
Swarup.