首页 > 解决方案 > 通过 ViewModel 类型获取不显眼的验证属性

问题描述

我需要类似的东西

var dict = html.GetUnobtrusiveValidationAttributes<ViewModel1>(propName);

我让它像这样工作:

public static IHtmlString GetVld<TModel>(this HtmlHelper html)
{
    ...

    foreach (var prop in typeof(TModel).GetProperties())
    {
        var attributes = new Dictionary<string, object>();
    
        Func<string, ModelMetadata, IEnumerable<ModelClientValidationRule>> ClientValidationRuleFactory 
            = (name, metadata) => ModelValidatorProviders.Providers.GetValidators(metadata ?? ModelMetadata.FromStringExpression(name, html.ViewData), html.ViewContext).SelectMany(v => v.GetClientValidationRules());

        var clientRules = ClientValidationRuleFactory(prop.Name, null);
        UnobtrusiveValidationAttributesGenerator.GetValidationAttributes(clientRules, attributes);

唯一的问题是我必须在视图中调用@model它才能使其工作,否则attributes将始终为空

@model MyVM // I want to make it work without this line
@Html.GetVld<MyVM>()

我尝试做: var html2 = new HtmlHelper<TModel>(html.ViewContext, html.ViewDataContainer)并使用html2而不是,html但它无济于事。

标签: asp.net-mvcasp.net-mvc-5

解决方案


推荐阅读