使用默认值在模型上注释属性

Bry*_*her 26 entity-framework-4 data-annotations asp.net-mvc-3

我创建了一个EF4.1代码优先模型(可能重要也可能不重要),我正在尝试获取我的创建脚手架模板的默认值.我的模型看起来像:

class Person {
    [DefaultValue (18)]
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我的Create视图看起来像:

<div class="editor-label">
    @Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Age)
    @Html.ValidationMessageFor(model => model.Age)
</div>
Run Code Online (Sandbox Code Playgroud)

我希望在运行时,EditorFor会用"18"预先填充文本框,但它没有这样的东西.我误解了DefaultValue属性的用途,还是我应该做的其他事情?

注意:我不想new { Value = "18" }在EditorFor方法上使用覆盖,它似乎打破了DRY.

Ken*_*ina 33

我不知道这是否能满足您的DRY需求,但我认为这是一个开始.

我会像这样重做模型:

public class Person {
    private const int DEFAULT_AGE = 18;
    private int _age = DEFAULT_AGE;
    [DefaultValue(DEFAULT_AGE)]
    public int Age {
        get { return _age; }
        set { _age = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

保持视图不变,但在create操作中执行以下操作:

public ActionResult Create() {
    return View(new Person());
}
Run Code Online (Sandbox Code Playgroud)

这样,输入文本框将使用默认的Age值创建,并且只有一个位置将指定默认值.

  • 请注意,代码首次迁移不会获取这些默认值.您需要手动将它们添加到迁移脚本中,在定义可以传递defaultValue参数的类型的调用中.请参见http://stackoverflow.com/a/13953246/70182 (2认同)

Bar*_*xto 7

class Person {
    public Person() {
        Age = 18;    
    }
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,每次执行新的Person时,将使用18作为年龄进行初始化,即使模型Binder创建了新对象.