将父模型的一个元素传递给局部视图

时间:2017-09-29 17:59:33

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

我有一个主模型和一个局部视图。局部视图的模型是没有值的新模型。但现在我想将父模型的一个元素传递给局部视图。我该怎么做呢?

父视图和部分视图具有不同的属性,因此我无法使用相同的模型。

型号:

public class Parent
{
     .
     .
     public List<SelectListItem> TypeList { get; set; }
     .
     .
}

public class Partial1
{
    public List<SelectListItem> TypeList1 { get; set; }
    .
    .
}
public class Partial2
{
    public List<SelectListItem> TypeList2 { get; set; }
    .
    .
}

父视图:

@model Models.Parent

@Html.Partial("_Partial1", new Partial1())
@Html.Partial("_Partial2", new Partial2())

我意识到我可以使用ViewDataDictionary将其传递给局部视图并使用它,但我想知道是否可以直接将其分配给我的局部视图模型。我可以这样做吗?

@Html.Partial("_Partial1", new Partial1(new{TypeList1 =Model.TypeList}))

上面的代码给出了编译时错误,说Partial1不包含带有1个参数的构造函数。

编辑1:

根据Chris Pratt的回答,我将我的代码修改为

@Html.Partial("_Partial1", new Partial1{TypeList1 =Model.TypeList})

这解决了编译错误。但现在这在部分视图1中导致运行时错误。

Partial1查看:

@model Models.Partial1
@Html.DropDownListFor(model => model.Type, Model.TypeList1, new { @class = "form-control" })

抛出错误&#34;没有类型&#39; IEnumerable&#39;的ViewData项目。密钥&#39;类型&#39;。&#34;

2 个答案:

答案 0 :(得分:1)

对不起,对不起。乍一看,该代码实际上看起来正确,但现在我看到了这个问题。您正在尝试将信息作为匿名对象传递给构造函数,该构造函数是无参数的。相反,您应该使用对象初始化语法:

new Partial1 { TypeList1 = Model.TypeList }

答案 1 :(得分:-1)

尝试使用

@{
    Html.RenderPartial("Partial1", new { param1 = model.property });
}

MSDN Link