簡體   English   中英

在自定義ModelBinder中提取數據注釋

[英]Extract Data Annotations in custom ModelBinder

我在實現System.Web.Mvc.IModelBinder的MVC中使用自定義模型綁定程序。

模型綁定器采用通用類型(類),提取每個類屬性,並將這些屬性以及有關每個屬性的其他詳細信息存儲在List中。 例如,對於每個屬性,它都基於登錄用戶存儲訪問權限,即每個屬性的讀取,寫入,無。 然后,在我的視圖中,我使用這些附加數據來確定是否顯示特定屬性。

我希望能夠檢索每個屬性的驗證數據注釋屬性,並也存儲這些詳細信息。 我想將它們存儲為html屬性,稍后可以在下面的示例中將其注入到用於顯示屬性的控件中。

<input data-val="true" data-val-length="Address1&#32;must&#32;be&#32;less&#32;than&#32;8!!" data-val-length-max="8" data-val-required="Address&#32;Line&#32;1&#32;is&#32;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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM