[asp.net-mvc]将模型从视图传递给控制器使用 Html.RenderAction 结果被空的模型中

标签: Asp.net-MVC C#
发布时间: 2016/10/9 6:19:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有以下模型︰

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 获取一个对象,包含多个列表。这是因为我需要隐瞒的行为,如果没有找到的项在列表/s。然而,当我将它们传递到控制器再次使用 @Html.RenderAction(...),空内控制器动作时得到我期待一个列表。为什么呢?

解决方法 1:

尝试以这种方式︰控制器︰

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

视图︰

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