0

我正在尝试将Kids集合从我的主视图传递到部分视图。这个主视图是强类型的,属性Kidshas_many.MainModel

我有我的默认详细信息视图,我的@model MyApp.Models.MainModel.

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

@Html.Partial("_KidsView", Model.Kids)

在我的配置中是这样的MainModel.cs

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直接调用循环,@foreach (var item in Model.Kids)但这也没有奏效。

我怎样才能正确地传递这个?

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

编辑:

好的,所以解决方案不起作用。我认为这是我的一个模型中不正确的东西。

这是 Kid.cs:

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

和 MainModel.cs

public ICollection<Kid> Kids { get; set; }

4

2 回答 2

1

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

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

  2. 您将错误的内容传递给对Partialor的调用RenderPartial。具体来说,如果您不指定模型参数,则默认情况下它会填充主视图的模型(这似乎是基于错误发生的,但您在问题中的调用是正确的)。

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

另一种解决方案是改用显示模板 - 它非常类似于局部视图,但在这种情况下更简洁。

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

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

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

于 2013-07-31T17:29:08.653 回答
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) *@
于 2013-07-31T17:25:04.350 回答