[英]Extract Data Annotations in custom ModelBinder
我在實現System.Web.Mvc.IModelBinder的MVC中使用自定義模型綁定程序。
模型綁定器采用通用類型(類),提取每個類屬性,並將這些屬性以及有關每個屬性的其他詳細信息存儲在List中。 例如,對於每個屬性,它都基於登錄用戶存儲訪問權限,即每個屬性的讀取,寫入,無。 然后,在我的視圖中,我使用這些附加數據來確定是否顯示特定屬性。
我希望能夠檢索每個屬性的驗證數據注釋屬性,並也存儲這些詳細信息。 我想將它們存儲為html屬性,稍后可以在下面的示例中將其注入到用於顯示屬性的控件中。
<input data-val="true" data-val-length="Address1 must be less than 8!!" data-val-length-max="8" data-val-required="Address Line 1 is required." id="Entity_Address_AddressLine1" name="Entity.Address.AddressLine1" type="text" value="aaaa1111" />
我是否必須使用反射從類中提取數據注釋屬性,還是有其他方法? 如何將數據注釋輸出為html屬性?
干得好:
foreach (PropertyInfo prop in Model.GetType().GetProperties())
{
var annotations = prop.GetCustomAttributes(typeof(ValidationAttribute), false);
foreach(var annotation in annotations)
{
if(annotation is RequiredAttribute)
{
//...
}
}
}
為此,我實現了一個自定義的DataAnnotationsModelMetadataProvider(MpMetaDataProvider),我在MVC中注冊並使用了它。 您在Global.asax的Application_Start事件中注冊它
ModelMetadataProviders.Current = new MpMetaDataProvider();
在我的MpMetaDataProvider中,我調用以下方法以返回特定類的特定屬性的數據注釋。 我希望這可以幫助別人。
this.GetMetadataForProperty(modelAccessor, modelProperty.Parent.EntityType, modelProperty.Name);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.