У меня есть следующий метод действия (частичный код):
[HttpPost]
public ActionResult Create(EditGrantApplicationViewModel editGrantApplicationViewModel)
{
if (!ModelState.IsValid)
{
return View("Create", editGrantApplicationViewModel);
}
return View("Index");
}
EditGrantApplicationViewModel
выглядит следующим образом (частичный код):
public class EditGrantApplicationViewModel
{
public IEnumerable<Title> Titles { get; set; }
public int TitleId { get; set; }
public IEnumerable<Bank> Banks { get; set; }
public int BankId { get; set; }
public IEnumerable<AccountType> AccountTypes { get; set; }
public int AccountTypeId { get; set; }
}
Когда это Create
представлениепри первом запросе я бы заполнил Titles
в своем слое обслуживания и просто возвратил экземпляр EditGrantApplicationViewModel
, например:
public ActionResult Create()
{
EditGrantApplicationViewModel editGrantApplicationViewModel = grantApplicationService.CreateEditGrantApplicationViewModel();
return View(editGrantApplicationViewModel);
}
CreateEditGrantApplicationViewModel
в моем слое обслуживания:
public EditGrantApplicationViewModel CreateEditGrantApplicationViewModel()
{
EditGrantApplicationViewModel editGrantApplicationViewModel = new EditGrantApplicationViewModel
{
Titles = titleRepository
.GetAll()
.Where(x => x.Active)
.OrderBy(x => x.Name)
};
return editGrantApplicationViewModel;
}
Когда я нажимаю кнопку отправки, происходит переход к методу публикации Create
.Он получает параметр editGrantApplicationViewModel
типа EditGrantApplicationViewModel
.Почему для свойства Titles установлено значение null?Я думал, что он сохранит значения?
Теперь допустим, что есть ошибка, ModelState.IsValid
- ложь.Так что это означает, что мне придется заново заполнить свойство Titles
.Учитывая значения свойств, которые были установлены в форме в editGrantApplicationViewModel
, как бы я теперь заполнил свойство Titles?Я предполагаю, что мне понадобится другой метод в моих сервисных слоях, который заполняет его?Каков наилучший способ сделать это?
Любой исходный код будет оценен.
ОБНОВЛЕНИЕ 2011-04-11
На мой взгляд, яесть 3 выпадающих.Титулы, банки и типы счетов.Вот почему у меня есть 3 списка в моей модели представления.У меня есть класс обслуживания для каждого, чтобы обрабатывать вставки, обновления и получение элементов.Например, в моем классе обслуживания банка у меня были бы методы Insert, Update, GetAll, GetById и т. Д., Относящиеся к банку.У меня были бы похожие службы заголовка и типа учетной записи.
Вот как у меня это сейчас в классе контроллеров:
private IGrantApplicationService grantApplicationService;
private ITitleService titleService;
private IBankService bankService;
private IAccountTypeService accountTypeService;
public GrantApplicationController(IGrantApplicationService grantApplicationService, ITitleService titleService, IBankService bankService, IAccountTypeService accountTypeService)
{
this.grantApplicationService = grantApplicationService;
this.titleService = titleService;
this.bankService = bankService;
this.accountTypeService = accountTypeService;
}
public ActionResult Create()
{
EditGrantApplicationViewModel editGrantApplicationViewModel = new EditGrantApplicationViewModel
{
// Populate the dropdown lists
Titles = titleService
.GetAll()
.Where(x => x.Active)
.OrderBy(x => x.Name),
Banks = bankService
.GetAll()
.Where(x => x.Active)
.OrderBy(x => x.Name),
AccountTypes = accountTypeService
.GetAll()
.Where(x => x.Active)
.OrderBy(x => x.Name)
};
return View(editGrantApplicationViewModel);
}
Мы говорили некоторое время назад, вы сказали, что этопредпочтительнее иметь один сервис для контроллера.В моем случае мне нужно заполнить 3 списка из 3 разных таблиц базы данных.Можете ли вы предоставить код, как бы вы это сделали.Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.