asp.net mvc中同一视图中的两个模型

时间:2015-03-11 15:35:31

标签: asp.net asp.net-mvc

我是asp.net&的新手我正在尝试使用asp.net mvc 4& EF6,我需要两个模型在同一视图下工作。我已经尝试了很多,但无法弄清楚如何使这项工作。这是我的代码,

控制器

public ActionResult AfterLogin()
    {
        if (Session["UserNAME"] != null)
        {
            var firstmodel = new MyViewModel { stats = db.stats.ToList() };
            var secondmodel = new MyViewModel { mans = db.mans.ToList() };
            return View(firstmodel);   //How can I also add the "secondmodel"?
        }
        else
        {
            return RedirectToAction("Login");
        }
    }

模型

public class MyViewModel
{
    public IEnumerable<stat> stats { get; set; }
    public IEnumerable<man> mans { get; set; }
}

如何同时使用这两种型号?非常需要这个帮助。 TNX。

3 个答案:

答案 0 :(得分:3)

制作包含两者的模型

public class CombinedModel
{
    public MyVieModel Model1 {get;set;}
    public MyVieModel Model2 {get;set;}
}

将其用于视图

public ActionResult AfterLogin()
{
    if (Session["UserNAME"] != null)
    {
        var firstmodel = new MyViewModel { stats = db.stats.ToList() };
        var secondmodel = new MyViewModel { mans = db.mans.ToList() };
        return View(new CombinedModel(){
           Model1 = firstmodel,
           Model2 = secondmodel
       });   //
    }
    else
    {
        return RedirectToAction("Login");
    }
}

答案 1 :(得分:3)

您只能绑定到一个模型。

创建一个包含您要使用的两个模型的新模型。

public class AfterLoginModel
{
    public MyViewModel Stats { get; set; }

    public MyViewModel Mans { get; set; }
}

或者在您的情况下,由于它们是完全相同的模型,您还可以设置statsmans属性并传入单个MyViewModel。

var model = new MyViewModel { 
                               stats = db.stats.ToList(),
                               mans = db.mans.ToList()
                            };
return View(model);

答案 2 :(得分:0)

Brandon和Jamiec的答案对于这种情况肯定更好,但如果您真的不想更改模型或创建新类,那么您始终可以将数据添加到{{1 }}。在您的Controller方法中:

ViewBag

然后在视图中你可以这样称呼它:

 ViewBag.SecondModel = new MyViewModel { mans = db.mans.ToList() };

请注意,您需要使用强制转换,因为@{ MyViewModel secondModel = (MyViewModel) ViewBag.SecondModel; } 中的任何内容都是动态输入的。