视图中的多个模型ASP.NETMVC(PartialView方法)
本文关键字:NETMVC PartialView 方法 ASP 模型 视图 | 更新日期: 2023-09-27 18:23:57
最近几天我学习了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。。但是怎么做呢?
默认情况下,Razor会将页面模型传递给分部。因此,假设_emp.cshtml
视图的模型为IEnumerable<Employee>
而不是IEnumerable<Person>
,则可以使用@Html.Partial
的重载来覆盖模型
@Html.Partial("~/Views/Employer/_emp.cshtml", Model.Cast<Employee>())
试试这个(现在没有机器运行),但应该可以
@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.