2011-08-11 49 views
2

在我們的asp.net mvc表單中,我們通常會將屬性添加到我們的視圖模型屬性中,例如DisplayName,Description和Required。asp.net mvc添加不帶屬性的模型元數據

然後,我們將爲每個房產撥打Html.EditorFor(model => model.PropertyName)

我現在有一種情況,我沒有可以應用這種屬性的強類型viewmodel。相反,我有下面的類的列表:

public class AttributeValue 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public bool Required { get;set; } 
    public object AttributeValue { get; set; } 
} 

如何添加元數據手動使用存儲在上面的類的信息,從而使EditorFor助手和驗證仍然有效?

回答

4

你應該定製ModelMetadataProvider編寫和ModelValidatorProvider類

public class DynamicModelValidatorProvider : ModelValidatorProvider 
{ 
    public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context) 
    { 
     // you validation logic go there 
     yield break; 
    } 
} 


public class DynamicModelMetadataProvider : ModelMetadataProvider 
{ 
    public override IEnumerable<ModelMetadata> GetMetadataForProperties(object container, Type containerType) 
    { 
     yield return new ModelMetadata(this, containerType, null, typeof (string), "Hello"); 
     yield return new ModelMetadata(this, containerType, null, typeof (string), "World"); 
    } 

    public override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, string propertyName) 
    { 
     return GetMetadataForProperties(null, containerType).SingleOrDefault(x => x.PropertyName == propertyName); 
    } 

    public override ModelMetadata GetMetadataForType(Func<object> modelAccessor, Type modelType) 
    { 
     return new ModelMetadata(this, null, modelAccessor, modelType, null); 
    } 
} 
相關問題