Задать вопрос

ViewModel как передать несколько моделей?

Как передать несколько моделей во ViewModel


1) Пример одной из моделей

public class NewsEntity : TableServiceEntity
    {
        public NewsEntity()
        {
            int y = 9999 - DateTime.Now.Year;
            int m = 13 - DateTime.Now.Month;            
            PartitionKey = string.Format("{0}_{1}", y,m);
            RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks - DateTime.UtcNow.Ticks, Guid.NewGuid());
                        
        }


        //Статья
        
         [DisplayName("Описание статьи")]
        public string Description { get; set; }             // Description - Описание статьи



2)Пример одного из репозитория

public class NewsRepository
    {
        private static CloudStorageAccount storageAccount;
        private NewsContext context;

        static NewsRepository()
        {
            storageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("DataConnectionString"));

            CloudTableClient.CreateTablesFromModel(
                typeof(NewsContext),
                storageAccount.TableEndpoint.AbsoluteUri,
                storageAccount.Credentials);
        }

        public NewsRepository()
        {
            this.context = new NewsContext(storageAccount.TableEndpoint.AbsoluteUri, storageAccount.Credentials);
            this.context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1));
        }



        #region CRUD Operations

        public void AddNews(NewsEntity newNews)
        {        
            newNews.ViewCount = 0;
            newNews.Votes = 0;
            newNews.Raiting = 0;
            newNews.AddedDate = DateTime.UtcNow;

            this.context.AddObject("NewsEntry", newNews);
            this.context.SaveChangesWithRetries();
        }



3) Пример контроллера

public class HomeController : Controller
    {
        private NewsRepository _repo = new NewsRepository();
        private SlideRepository _slider = new SlideRepository();

        public ActionResult Index()
        {  
           // var model = _slider.ListSlide(); как работает с одной моделью
            Что должно быть здесь при выводе нескольких моделей? =)
            return View(model);
        }
  • Вопрос задан
  • 11237 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@slrzz
Модель
public class NewsViewModel{
    public IEnumerabe<NewsEntity> News{get;set;}
    public SliderEntity Slider{get;set;}
}

Контроллёр
public ActionResult Index(){
  var model = new NewsViewModel(){
     News=_repo.NewsEntities.Where(...).AsIEnbumerable(),
     Slider=_slider.Slider.Single(...)
  };
 return View(model);
}


Вид

@model NewsViewModel
Слайдер
@Model.Slider
Новости
@foreach(var item in Model.News){
 ....
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
hotach
@hotach
Можно сделать класс-обертку для нескольких моделей и передавать во View его. Или не использовать View со строгой типизацией.
Ответ написан
Shedal
@Shedal
Ну во-первых, если все объекты NewsEntity являются объектами одного класса, или их классы наследуются от одного класса, то можно сделать вот так:

@model IEnumerable<BaseEntity>

А если модели совсем разные, то можно их в контроллере записать во ViewBag (или ViewData):

ViewBag.NewsEntity = new NewsEntity( /* ... */ );
ViewBag.OtherEntity = new OtherEntity( /* ... */ );

И потом во view'хе так же к ним и обращаться: ViewBag.NewsEntity....
Ответ написан
Комментировать
SychevIgor
@SychevIgor
С точки зрения архитектуры mvc наверное стоитьт созать ViewModel которая все содержит, с точки зрения быстрого написания я передавал в View Tuple<Model1,Model2,Model3>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы