Я хочу использовать модель представления для отображения вместо модели домена. У меня есть эти вид модели классов:Объект модели домена для просмотра объекта модели в MVC
public class ArticleDescriptionViewModel
{
public string Title { get; set; }
public DateTime DateCreated { get; set; }
}
public class HomePage
{
public List<ArticleDescriptionViewModel> Articles { get; set; }
}
В модели домена я получил:
public class ArticleDescription
{
public string Title { get; set; }
public DateTime DateCreated { get; set; }
}
и этот метод обслуживания:
public List<ArticleDescription> GetArticlesDescription()
{
var articleDescription= from a in _ctx.Articles
select new ArticleDescription
{ Title = a.Title, DateCreated = a.DateCreated };
return articleDescription.ToList();
}
в контроллере я хочу, чтобы соответствовать моим список внутри класса модели моего представления со списком, возвращаемым моим классом модели домена.
public ActionResult Index()
{
HomePage HomePageInstance = new HomePage();
HomePageInstance.Articles = _repo.GetArticlesDescription();
return View(HomePageInstance);
}
Я получил сообщение об ошибке:
"Cannot implicitly convert type System.Collections.Generic.List (DBayonaCode.Domain.Services.Models.ArticleDescription)' to 'System.Collections.Generic.List(DBayonaCode.Models.ArticleDescriptionViewModel)'"
Но эти два класса эквивалентны? Я делаю что-то неправильно. Я ценю вашу помощь?
Оба класса ** не эквивалентны **, они могут иметь одинаковые имена имен свойств, но они не являются одними и теми же классами. Вам нужно преобразовать 'ArticleDescription' в' ArticleDescriptionViewModel'. Используйте linq '.Select (x => new ArticleDescriptionViewModel() {...' или посмотрите на использование таких инструментов, как [automapper] (http://automapper.codeplex.com/) –
Спасибо за ваш ответ. cheack Automapper option, однако остается один вопрос: хорошо ли это, что я здесь делаю, пытаясь разобраться в проблемах ?, вы знаете, я мог бы сделать ссылку на мой класс домена в своем контроллере, чтобы создать список типов, чтобы получить результаты, и все. Мне не нужно было сопоставлять эти два класса (класс домена - класс вида). Есть ли другой лучший подход? –
user3007593
Вы правильно подходите. Контроллер отвечает за получение данных модель (ы) из службы и сопоставление ее с моделью просмотра. Хотя вы можете использовать модель домена в представлении, всегда лучше использовать модель представления для отображения/редактирования только того, что вы хотите, для применения атрибутов проверки и т. д. –