Правильно, так что а) Я не уверен, что это правильный форум для этого вопроса, мне не удалось найти лучшее предложение, и б) Я не смог найти ответ на вопрос, которому я не могу поверить, что я раньше не спрашивал:
Итак, если у меня есть модель, стандартная форма для заполнения и ошибки, поэтому я возвращаю ее пользователю, как мне или как СЛЕДУЕТ структурировать код, чтобы сделать Вы уверены, что все поддерживающие свойства созданы?
Пример:
public ActionResult DoThing()
{
var model = new DoThingModel();
model.Things = ThingService.FetchThings();
//Do Other Things
return View(model);
}
Довольно стандартное действие GET
[HttpPost]
public ActionResult DoThing(DoThingModel model)
{
var valid = ThingService.ValidateThing(model);
if(!valid)
{
model.ValidationMessage = "Ohh no validation failed";
model.valid = false;
return View(model); //I have't rebuilt model.Things with ThingService.FetchThings()
}
else
{
return RedirectToAction("Success");
}
}
Так что, если вещь действительна, перенаправьте на страницу успеха , но в противном случае верните форму (содержащуюся в модели) пользователю с сообщением проверки. Проблема в том, что на моей странице формы есть что-то, и я не заполнил модель этим.
Теперь, это очень простой пример, и я мог бы просто передать вещи обратно в форме или дублировать строку кода, которая его заполняет. Но представьте, что у меня гораздо более сложная модель с панировочными сухарями, множеством свойств, которые необходимо заполнить. Дублирование кода = плохо, так как я должен убедиться, что в модели есть все, что мне нужно, прежде чем передать его обратно? Я думал о создании сервиса, но это сервис с одной функцией. Я думал об использовании конструктора, но это плохо сочетается с привязкой модели. Я думал о создании DoThingModel.Init (), который выполняет всю работу, но размещение такого кода внутри класса модели кажется грязным. Я поиграл с частной функцией в контроллере, которая заполнила все необходимые свойства, но это снова кажется грязным.
Я чувствую, что должен быть стандартный шаблон кода, который идет => Создать новую модель => Сделать уверен, что в модели есть все, что поддерживает страницу => вернуть модель => проверить модель => повторно применить любые свойства => вернуть модель => повторить, пока не будет действительным.
Как я уже говорил во вступлении, это должно быть стандартная вещь где-то, но я не могу ее найти.