ASP MVC中的嵌套集合视图部分

时间:2013-07-31 17:14:01

标签: asp.net-mvc asp.net-mvc-4

我正在尝试将Kids集合从主视图传递给部分。此主视图是强类型的,Kids属性是has_many的{​​{1}}关联。

我的默认详细信息视图中显示了MainModel

在这个视图中,我想展示它的孩子,

@model MyApp.Models.MainModel

在我的@Html.Partial("_KidsView", Model.Kids)中配置如下:

MainModel.cs

并在我的parital public ICollection<Kid> Kids { get; set; }中指定为:

_KidsView

我收到的是@model ICollection<MyApp.Models.Kid>

InvalidOperationException

我尝试过不使用部分内容并直接在The model passed into this the dictionary if of type 'System.Data.Entity.DyanmicProxies.MainModel_#WHOLE_BUNCH_OF_NUMBERS' but this dictionary requires a model item of type 'System.Collections.Genereic.ICollection[MyApp.Models.Kid] 上调用foreach循环,但这也没有用。

我怎样才能通过这个?

我觉得我可能会做一些明显错误的事情,但我看不到它。

编辑:

好的,所以解决方案无效。我认为这是我的一个模型中的东西,这是不对的。

这是Kid.cs:

@foreach (var item in Model.Kids)

和MainModel.cs

[Column("main_model_id")] public int MainModelID { get; set; } public virtual MainModel MainModel {get; set; }

2 个答案:

答案 0 :(得分:1)

你得到的错误是明确的,实际上只能由两件事引起:

  1. 您的部分视图中的模型规范不正确,您说它不是。

  2. 你错误地传递给PartialRenderPartial的电话。具体来说,如果您没有指定模型参数,默认情况下它会填充主视图的模型(这似乎是基于错误发生的,但您在问题中的调用是正确的。)

  3. 由于似乎两者都不是这种情况,我只能假设存在某种缓存或其他一些“粘性”导致您当前的代码实际上不是正在运行的代码。停止并重新启动调试,甚至可能关闭Visual Studio,并在确认您的代码确实正确后重试。

    另一种解决方案是使用显示模板 - 它非常像局部视图,但在这种情况下更清洁。

    1. 在“视图”文件夹中,创建一个名为“DisplayTemplates”的新文件夹。在该文件夹中,创建一个名为“Kid.cshtml”的局部视图。向您的Kid模型强烈输入该视图(不是可枚举的,只是Kid)。添加应为Kid的一个实例呈现的HTML。

    2. 在主视图中添加以下内容:

      @Html.DisplayFor(m => m.Kids)
      
    3. 党!

答案 1 :(得分:0)

这是你应该怎么做的;让我们说这是你的主要模特:

public class MainModel
{
  public IEnumerable<Kid> Kids { get; set; }
  // Other properties
}

在主视图中执行此操作:

@model MyApp.Models.MainModel

@Html.EditorFor(model => model.Kids)

然后,创建一个如下所示的局部视图,将其命名为Kid.cshtml,并将其放在Views / Shared / EditorTemplates下:

@model MyApps.Models.Kid

@* Your html helpers (input fields) *@