Я только начинаю изучать asp.net mvc и не уверен, что правильно делать.
У меня есть пользователь, и у пользователя есть коллекция (0 или более) напоминаний. У меня есть контроллер для пользователя, который получает напоминания для текущего пользователя, вошедшего в систему, из службы напоминаний. Он заполняет модель, которая содержит некоторую информацию о пользователе и коллекции напоминаний.
У меня вопрос: нужно ли мне иметь 2 разных представления: одно, когда нет напоминаний, и другое, когда есть напоминания? Или я должен иметь 1 просмотр, который проверяет количество напоминаний и отображает разные вещи? Одно представление кажется неправильным, так как в итоге я получаю код, который говорит if (Model.Reminders.Count==0){//do something} else {do something else}
, а логика в представлении кажется неправильным. Но если я хочу иметь 2 разных представления, я хотел бы иметь такой код в моем контроллере:
[Authorize]
public ActionResult Index()
{
MembershipUser currentUser = m_membershipService.GetUser();
IList<Reminder> reminders = m_reminderRepository.GetReminders(currentUser);
if (reminders.Count == 0)
{
var model = new EmptyReminderModel
{
Email = currentUser.Email,
UserName = currentUser.UserName
};
return View(model);
}
else
{
var model = new ReminderModel
{
Email = currentUser.Email,
UserName = currentUser.UserName,
Reminders = reminders
};
return View(model);
}
но, очевидно, это не компилируется, так как представление не может принимать оба разных типа. Поэтому, если я собираюсь сделать это, я должен вернуть конкретное именованное представление из моего контроллера, в зависимости от пустоты напоминаний, или мой метод Index () перенаправить на другие действия, например:
[Authorize]
public ActionResult Index()
{
MembershipUser currentUser = m_membershipService.GetUser();
IList<Reminder> reminders = m_reminderRepository.GetReminders(currentUser);
if (reminders.Count == 0)
{
return RedirectToAction("ShowEmptyReminders");
}
else
{
return RedirectToAction("ShowReminders");
}
}
, что выглядит лучше, но тогда мне нужно повторно запросить напоминания для текущего пользователя в действии ShowReminders.
Или я должен заниматься чем-то другим полностью?