Я планирую создать приложение Asp.Net MVC, которое содержит страницы редактирования/создания для большой модели с отношением «многие ко многим» с другими моделями. Я нашел Saving Many to Many relationship data on MVC Create view и планирую использовать его.ViewModel для модели с большим количеством свойств?
В примере на странице создания используется следующая ViewModel.
public class UserProfileViewModel
{
public int UserProfileID { get; set; }
public string Name { get; set; }
public virtual ICollection<AssignedCourseData> Courses { get; set; }
}
И UserProfile
модель имеет только два свойства, так что ViewModel просто дублирует все свойства.
public class UserProfile
{
public UserProfile()
{
Courses = new List<Course>();
}
public int UserProfileID { get; set; }
public string Name { get; set; }
public virtual ICollection<Course> Courses { get; set; }
}
Однако, в моем случае, там будет много свойств (с аннотациями данных), скажем, 50 свойств. Должен ли ViewModel дублировать все эти свойства (с аннотациями данных тоже)? (выглядит уродливо?) Или есть лучший способ?
Update Это хорошая практика, чтобы определить, как ViewModel
public class UserProfileViewModel
{
public UserProfile UserProfile { get; set; }
.... // Other properties needed by the view.
}
Один недостаток этого способа является его разоблачить все свойства в модели даже это не требуется в представлении.
Я считаю, что вы всегда должны использовать строго типизированную модель представления для данных вида. ViewData/ViewBag - это устаревшие хаки. Вся информация, необходимая для представления, должна быть в модели представления. Я знаю о page.title, используя ViewBag, но это слишком неважно, чтобы думать о подходящей альтернативе. – MikeSW
Я обновил вопрос и спрошу, неплохо ли просто определить свойство типа модели? – ca9163d9
ViewModel должен содержать только свойства модели, которые используются в представлении ... вообще говоря, если мы не говорим о 50 свойствах модели, 49 из которых требуются View, и в этом случае я бы просто включил UserProfile, поскольку вы сделали в вашем примере, даже если это не технически правильно. –