如果我有更改编辑器并设置一些值的约定

public class MetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata GetMetadataForProperty(Func<object> modelAccessor, Type containerType, System.ComponentModel.PropertyDescriptor propertyDescriptor)
    {
        var meta = base.GetMetadataForProperty(modelAccessor, containerType, propertyDescriptor);
        if (IsNumericType(propertyDescriptor.PropertyType))
        {
            meta.TemplateHint = "Number";

            var attr = propertyDescriptor.Attributes.OfType<RangeAttribute>().FirstOrDefault();
            if (attr != null)
            {
                meta.AdditionalValues["min"] = attr.Minimum;
                meta.AdditionalValues["max"] = attr.Maximum;
            }
        }
        return meta;
    }
    //...
}

然后我可以在模板中获取其他值
@{
    var min = ViewData.ModelMetadata.AdditionalValues["min"];
    var max = ViewData.ModelMetadata.AdditionalValues["max"];
}

但是,如果我使用相同的模板
@Html.EditorFor(x => x.Number, new { min = 1, max = 10 })

然后我应该得到这样的值
@{
    var min = ViewData["min"];
    var max = ViewData["max"];
}

我可以以某种方式合并AdditionalViewData和ModelMetadata.AdditionalValues,以便可以从一个地方获取值吗?

最佳答案

老实说,我还没有尝试查看AdditionalValues是否被正确提取,但是内置的功能为您提供了什么?

    @using System.Web.Mvc

    @{
         var meta = ModelMetadata.FromLambdaExpression(model => model, ViewData);
     }

关于asp.net-mvc - 使用EditorFor时将值添加到ModelMetadata.AdditionalValues,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15360213/

10-12 14:55