Как создать и использовать два или более ViewData.Model - PullRequest
1 голос
/ 10 июня 2010

Можете ли вы помочь мне, как создать мою собственную ViewData.Model из mesto?

public ActionResult Index() 
{
            ViewData["Message"] = "Moji Priatelia";
            var friends = from friend in friendsDb.FriendsTables
                          orderby friend.Priezvisko
                          select friend;
            var mesto = from mesta in friendsDb.MestoTables
                        orderby mesta.Mesto
                        select mesta;

            return View(friends);
}

когда я добавляю новый вид ViewData.Model имеет данные от друзей, но нет от mesto, как я могу создать модель для mesto? Большое спасибо, я начинающий.


Вот у меня проблема.

public class IndexViewModel 
    {
        public IEnumerable<Friend> Friends { get; set; }
        public IEnumerable<Mesta> Mesto { get; set; }
    }

Не удалось найти тип или имя пространства имен «Друг» (вам не хватает директивы using или ссылки на сборку?) Не удалось найти тип или имя пространства имен 'Mesta' (отсутствует директива using или ссылка на сборку?)

Но у таблицы есть имена FriendTable, MestoTable, если я использую эти имена, это corect. Затем я делаю новый вид через IndexViewModel, но я не могу используйте это

<%: Model.Friends %>
<%: Model.Mesto %>

это останавливается с ошибкой Элемент модели, передаваемый в словарь, имеет тип 'MVCApp.Controllers.IndexViewModel', но для этого словаря требуется элемент модели типа 'System.Collections.Generic.IEnumerable`1 [MVCApp.Controllers.IndexViewModel]'

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

Просто создайте ViewModel и передайте его вашему View:

public class IndexViewModel 
{
   public IEnumerable<Friend> Friends { get; set; }
   public IEnumerable<Mesta> Mesto { get; set; }
}

Чтобы это работало, вам сначала нужно настроить метод действия следующим образом:

public ActionResult Index()
{
        ViewData["Message"] = "Moji Priatelia";
        var friends = from friend in friendsDb.FriendsTables
                      orderby friend.Priezvisko
                      select friend;
        var mesto = from mesta in friendsDb.MestoTables
                    orderby mesta.Mesto
                    select mesta;

        var ViewModel = new IndexViewModel {
            Friends = friends,
            Mesto = mesto
        }

        return View(ViewModel);
}

Ваш вид теперь должен быть строго напечатан с типом IndexViewModel.

Доступ к вашим членам будет выглядеть примерно так:

<%: Model.Friends %>
<%: Model.Mesto %>

ViewModels - это путь, когда вам нужно показывать сложные данные в ваших представлениях, которые на самом деле не проецируют модель предметной области.

0 голосов
/ 10 июня 2010

Ваша лучшая ставка, вероятно, заключается в том, чтобы обернуть два объекта в другой объект и передать их на ваше рассмотрение.

Например:

public class FriendsMestoDataContext()
{
    public IEnumerable<Friends> friends{get;set;}
    public IEnumerable<Mesto> mesto{get;set}
}

Затем вы можете передать этот новый объект на просмотр и получить доступ к свойствам friends и mesto, которые будут двумя классами, которые вы возвращаете из ваших запросов Linq:

public ActionResult Index() 
{
            ViewData["Message"] = "Moji Priatelia";
            var friendsData = from friend in friendsDb.FriendsTables
                          orderby friend.Priezvisko
                          select friend;
            var mestoData = from mesta in friendsDb.MestoTables
                        orderby mesta.Mesto
                        select mesta;
            var dataModel = new FriendsMestoDataContext(){
                                            friends = friendsData,
                                            mesto = mestoData}


            return View(dataModel);
}

UPDATE

Как сказал Шахарьяр ниже, вам нужно строго набрать ваш взгляд с помощью FriendsMestoDataContex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...