视图中的多个模型ASP.NET MVC(部分视图方法)

时间:2014-09-22 11:16:45

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

最后几天我学习ASP.NET MVC。当我在“主”视图中使用两个或更多模型时,我遇到了问题。

模型一:

 public class PersonController : Controller
{
    private Context ctx = new Context();
    public IEnumerable<Employer> employersCol { get;set; }
    // GET: Person]
    public ActionResult Index()
    {
        employersCol = ctx.employers.ToList();
        return View(ctx.persons.ToList());
    }
}

模型二:

 public class EmployerController : Controller
    {
        private Context ctx = new Context();
        // GET: Employer
        public ActionResult Index()
        {
            return View(ctx.employers.ToList());
        }
    }

所以,现在在“主”视图中我会显示数据:

@foreach (var p in Model)
{
    @Html.DisplayFor(m => p.firstName);
    @Html.DisplayFor(m => p.lastName);
}
@Html.Partial("~/Views/Employer/_emp.cshtml")

但Visual Studio说:

  

发生了'System.InvalidOperationException'类型的异常   System.Web.Mvc.dll但未在用户代码中处理

     

附加信息:传递到字典中的模型项是   类型   'System.Collections.Generic.List 1[WebApplication7.Models.Person]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [WebApplication7.Models.Employer]'。

问题是:如何将类型传递给局部视图。也许你更喜欢另一种方法。嗯..也许我必须使用Ajax ..但是怎么样?

2 个答案:

答案 0 :(得分:0)

默认情况下,Razor会将页面模型传递给部分。因此,假设_emp.cshtml视图的模型为IEnumerable<Employee>而不是IEnumerable<Person>,那么您可以使用@Html.Partial的重载来覆盖模型

@Html.Partial("~/Views/Employer/_emp.cshtml", Model.Cast<Employee>())

答案 1 :(得分:0)

试试这个(现在没有机器运行vs)但是应该可以运行

@Html.Partial("~/Views/Employer/_emp.cshtml", model.Employer) ; // the property name by which u expose your model, if your model is not an Arraylist, then you need to loop through it.