Annotating properties on a model with default values

Viewed 56548

I created an EF4.1 code-first model (may or may not be important), and I'm trying to get default values for my Create scaffold template. My model looks like:

class Person {
    [DefaultValue (18)]
    public int Age { get; set; }
}

And then my Create view looks like:

<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>

I would expect at runtime, that the EditorFor would pre-populate the textbox with "18", but it does no such thing. Am I misunderstanding what the DefaultValue attribute is for, or is there something else I should be doing?

Note: I don't want to use the new { Value = "18" } override on the EditorFor method, it seems to break DRY.

5 Answers

Assuming that your view has a definition such as:-

@model Person

and your controllers HTML GET returns an empty View

return View();

Then simply add a class that can be rendered that contains default values

return View(new Person{ Age = 18 });

Another option is to add a singleton static helper to your Person class that returns a default, populated class

  static public Person GetDefaultNew()
        {
            return new Person{ Age = 18 };
        }

Then you need

return View(new Person.GetDefaultNew());
Related