从EditorTemplate内部访问默认值属性

时间:2014-02-25 20:39:20

标签: asp.net-mvc asp.net-mvc-4 razor

我有一个自定义编辑器模板,可以将简单的文本框转换为数字框(对于类型编号)。但是,我试图从DefaultValue属性

中定义的模型中提取默认值

在模型中我有

[DisplayName("Initial Token Count")]
[DataType("Number")]
[Required]
[DefaultValue(5)]
public int InitialTokenCount { get; set; }

我有的EditorTemplate

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", type = "number" })
<script type="text/javascript">
    $(document).ready(function () {
        $("#@Html.NameFor(c => c)").kendoNumericTextBox({ decimals: 0, format: "#"});
    });
</script>

现在,当视图呈现时,如果没有定义值,则默认为0,但我希望默认为5

中定义的DefaultValue(5)

我错过了一些要求实现这一目标的电话吗?

1 个答案:

答案 0 :(得分:1)

您可以使用反射来实现此目的:

@{
    object value;
    if(Model == null)
    {
        value = ((System.ComponentModel.DefaultValueAttribute)
                            ViewData.ModelMetadata.ContainerType.GetProperty(ViewData.ModelMetadata.PropertyName).
                            GetCustomAttributes(typeof(System.ComponentModel.DefaultValueAttribute), false)[0]).Value;
    }
    else
    {
        value = ViewData.TemplateInfo.FormattedModelValue;
    }
}
@Html.TextBox("", @value, new { @class = "text-box single-line", type="number"})

编辑:改了一下,以便它适用于现有的模型值。