我正在尝试将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; }
答案 0 :(得分:1)
你得到的错误是明确的,实际上只能由两件事引起:
您的部分视图中的模型规范不正确,您说它不是。
你错误地传递给Partial
或RenderPartial
的电话。具体来说,如果您没有指定模型参数,默认情况下它会填充主视图的模型(这似乎是基于错误发生的,但您在问题中的调用是正确的。)
由于似乎两者都不是这种情况,我只能假设存在某种缓存或其他一些“粘性”导致您当前的代码实际上不是正在运行的代码。停止并重新启动调试,甚至可能关闭Visual Studio,并在确认您的代码确实正确后重试。
另一种解决方案是使用显示模板 - 它非常像局部视图,但在这种情况下更清洁。
在“视图”文件夹中,创建一个名为“DisplayTemplates”的新文件夹。在该文件夹中,创建一个名为“Kid.cshtml”的局部视图。向您的Kid
模型强烈输入该视图(不是可枚举的,只是Kid
)。添加应为Kid
的一个实例呈现的HTML。
在主视图中添加以下内容:
@Html.DisplayFor(m => m.Kids)
党!
答案 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) *@