使用Html.RenderAction将模型从视图传递到控制器会导致模型为null

时间:2016-07-11 15:30:28

标签: c# asp.net-mvc renderaction

我有以下型号:

public class Foo
{
    public List<Employee> Employees{ get; set; }
    public List<Company> Companies{ get; set; }
    public List<Admin> Admins{ get; set; }
}

然后我有我的控制器动作:

public ActionResult Index()
{
    Foo model = GetFooFromSomewhere();
    return PartialView("Index", model);
} 

public ActionResult Employees(List<Employee> model)
{
    return PartialView("Employees", model);
}

public ActionResult Companies(List<Company> model)
{
    return PartialView("Companies", model);
}

public ActionResult Admins(List<Admin> model)
{
    return PartialView("Admins", model);
}

然后我有我的观点

Index.cshml:

@model Foo
@if(Model.Employees.Count > 0)
{
    @{Html.RenderAction("Employees", "Config", Model.Employees);}
}
@if(Model.Companies.Count > 0)
{
    @{Html.RenderAction("Companies", "Config", Model.Companies);}
}
@if(Model.Admins.Count > 0)
{
    @{Html.RenderAction("Admins", "Config", Model.Admins);}
}

Employees.cshtml:

@model List<Employee>

//Display model here

Companies.cshtml

@model List<Company>

//Display model here

Admins.cshtml

@model List<Admin>

//Display model here

如您所见,我使用Index.cshtml来获取包含多个列表的对象。这是因为如果列表中没有找到任何项目,我需要隐藏操作。但是,当我使用@ Html.RenderAction(...)再次将它们传递给控制器​​时,当我期待List时,我在控制器操作中得到null。为什么呢?

2 个答案:

答案 0 :(得分:3)

尝试这种方式: 的控制器:

public ActionResult Admins(List<Admin> m)
{
    return PartialView("Admins", m);
}

查看:

@{Html.RenderAction("Admins", "Config", new { m = Model.Admins });}

答案 1 :(得分:1)

您必须将初始化的模型传递给控制器​​中的Index视图。

public ActionResult Index()
{
   Foo model = GetFooFromSomewhere();
   return PartialView("Index", model);
}