如何使用 Html.EditorFor 内的 DefaultValueAttribute 值?

How to use DefaultValueAttribute value within Html.EditorFor?

在模型中使用 ASP.Net ComponentModelDataAnnotations,我有:

[Required]
[Range(1, 50000, ErrorMessage = "Please specify the number of foos.")]
[DefaultValue(1)]
public int Foo { get; set; }

使用以下方式呈现:

@Html.LabelFor(model => model.Foo)
@Html.EditorFor(model => model.Foo)
@Html.ValidationMessageFor(model => model.Foo, "", new { @class = "text-danger" })

但是呈现的输入字段中的值是 0 而不是 DefaultValueAttribute 指示的 1

研究这个,this answer提供了两个解决方案:

  1. 通过定义新模型并传递给视图来设置控制器中的值(推荐,并且有效,但忽略我在 DefaultValueAttribute
  2. 中的值
  3. 直接使用@value = "1"在视图中设置值(不推荐,因为它违反了 MVC 约定)

是否可以将 DefaultValueAttribute 的值自动渲染到 HTML 控件中?例如。 @Html 辅助方法读取 DefaultValueAttribute?

似乎链接问题中的答案省略了一些重要选项:使用模型的构造函数,或默认初始化 属性:

public class FooModel
{
    public FooModel()
    {
        Foo = 1;
    }

    // Or
    [Required]
    [Range(1, 50000, ErrorMessage = "Please specify the number of foos.")]
    public int Foo { get; set; } = 1;
}

随心所欲。相关知识不会从您的模型泄漏到控制器中,如果未被覆盖,视图当然会使用该值,无论是在构建模型时还是在之后设置 属性。