【问题标题】:To pass one element of parent model to partial view将父模型的一个元素传递给局部视图
【发布时间】:2017-09-29 17:59:33
【问题描述】:

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

父视图和部分视图具有不同的属性,所以我不能使用相同的模型。

型号:

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 中出现运行时错误。

部分1视图:

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

抛出错误“没有具有键 'Type' 的 'IEnumerable' 类型的 ViewData 项。”

【问题讨论】:

  • 为什么在Partial1 中没有2 个List&lt;SelectListItem&gt; 属性?
  • 是的,应该可以正常工作。这里的实际问题是什么?
  • @ChrisPratt 我收到一个编译时错误,提示 Partial1 不包含采用 1 个参数的构造函数。
  • @TheFallenOne 请完整定义您想要实现的目标
  • 关于您的编辑 - 这意味着 Partial1 中的 TypeList1null (有关更多详细信息,请参阅 this Q/A)这可能是因为 Parent 中的 TypeList 也是 @987654335 @)

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


【解决方案1】:

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

new Partial1 { TypeList1 = Model.TypeList }

【讨论】:

    【解决方案2】:

    尝试使用

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

    MSDN Link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多