6

エディターを変更していくつかの値を設定する規則がある場合

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をマージして、1つの場所から値を取得できるようにすることはできますか?

4

1 に答える 1

1

正直なところ、AdditionalValues が適切にプルされるかどうかを確認しようとはしていませんが、ビルトインはあなたの見解で何を提供しますか?

    @using System.Web.Mvc

    @{
         var meta = ModelMetadata.FromLambdaExpression(model => model, ViewData);
     }
于 2013-12-09T23:19:16.540 に答える