如何创建和使用两个或更多ViewData.Model

时间:2010-06-10 19:45:30

标签: asp.net-mvc-2 c#-4.0

你能帮助我如何从mesto创建我自己的ViewData.Model吗?

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; }
    }

找不到类型或命名空间名称'Friend'(您是否缺少using指令或程序集引用?) 找不到类型或命名空间名称'Mesta'(您是否缺少using指令或程序集引用?)

但是表格有FriendTable,MestoTable,如果我使用这个名字它是核心。然后我通过IndexViewModel做新的视图但我不能 使用这个

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

这会因错误而停止 传递到字典中的模型项的类型为'MVCApp.Controllers.IndexViewModel',但此字典需要类型为'System.Collections.Generic.IEnumerable`1 [MVCApp.Controllers.IndexViewModel]'的模型项

2 个答案:

答案 0 :(得分:2)

只需创建一个ViewModel并将其传递给您的视图:

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是您需要在视图中显示并不真正投影域模型的复杂数据的方法。

答案 1 :(得分:0)

您最好的选择可能是将两个物体包裹在另一个物体中并将其传递给您的视野。

如:

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);
}

<强>更新

正如Shaharyar在下面所说,您需要使用FriendsMestoDataContex强烈输入您的观点。