一旦您开始在站点上获得多个用户,我很确定在 ViewModel 中更改当前模型元数据提供程序是不安全的,更不用说线程安全了。您也许可以使用属性方法,但您仍然必须实现自己的 ModelMetadataProvider 并在应用程序开始时将其设置为 Current,然后检查某些属性并确定要返回的 ModelMetaData,如果没有则返回一直到基础实现。虽然老实说,你在谈论的限制数量,让它只处理选定的视图模型,但不允许知道或测试这些视图模型?听起来你在其他地方做错了什么......
更新:当我需要一个 ModelMetadata 提供者时,我创建了一个看起来像这样的提供者......
public class MyMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
{
if ((containerType != typeof(MyType))
return base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
//setup custom ModelMetadata here
}
}