Аннотирование свойств модели с значениями по умолчанию
Я создал первую кодовую модель EF4.1 (может быть или не быть важно), и я пытаюсь получить значения по умолчанию для моего шаблона Create scaffold. Моя модель выглядит следующим образом:
class Person {
[DefaultValue (18)]
public int Age { get; set; }
}
И тогда мое представление 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>
Я ожидал бы во время выполнения, что EditorFor будет предварительно заполнять текстовое поле "18", но это не так. Я не понимаю, что такое атрибут DefaultValue, или есть что-то еще, что я должен делать?
Примечание. Я не хочу использовать переопределение new { Value = "18" }
на методе EditorFor, оно, кажется, прерывает DRY.
Ответы
Ответ 1
Я не знаю, удовлетворит ли это ваши потребности в 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; }
}
}
Сохраняйте представление как есть, но в действии create сделайте следующее:
public ActionResult Create() {
return View(new Person());
}
Таким образом, текстовое поле ввода будет создано со значением по умолчанию "Возраст", и будет указано только одно место, где будет указано это значение по умолчанию.
Ответ 2
class Person {
public Person() {
Age = 18;
}
public int Age { get; set; }
}
В этом случае каждый раз, когда вы создаете новый возраст Person, будет инициализирован с 18 лет, даже когда новый объект создается с помощью привязки модели.
Ответ 3
Model
class Person {
public Person() {
Age = 18;
}
public int Age { get; set; }
}
контроллер
public ActionResult Create() {
return View(new Person());
}
Он отлично работает.
Ответ 4
Предполагая, что ваше представление имеет такое определение, как: -
@model Person
и ваши контроллеры HTML GET возвращает пустой View
return View();
Затем просто добавьте класс, который можно отобразить, который содержит значения по умолчанию
return View(new Person{ Age = 18 });
Другой вариант - добавить статический помощник singleton к вашему классу Person, который возвращает стандартный по умолчанию класс
static public Person GetDefaultNew()
{
return new Person{ Age = 18 };
}
Тогда вам нужно
return View(new Person.GetDefaultNew());
Ответ 5
Настройка параметра JSON.net DefaultValueHandling делает работу DefaultValue:
class Person {
[JsonProperty("Age", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
[DefaultValue(18)]
public int Age { get; set; }
}