我有两种观点: 1)注册 - 用于创建用户帐户的主视图 2)类别 - 如果在寄存器视图组合字段中不存在类别,则动态添加类别的局部视图。
当用户在注册时单击“添加类别”时,“类别”视图显示为jQuery对话框。此视图显示组成名称和描述等新类别所需的字段。出于这个原因,它有一个单独的模型。
在获取页面上一切正常,但是在帖子上,如果有一些验证错误,页面需要重新加载用户提供程序值进行更正,而不是抛出以下错误:
异常详细信息:System.InvalidOperationException:传递到字典中的模型项的类型为“Delight.Models.User”,但此字典需要“Delight.Models.Category”类型的模型项。
我认为使用以下语句可能会导致此问题(因为它没有指定用于部分视图的模型对象):
@Html.Partial("CreateCat")
然而,采用以下过载并没有解决问题:
@Html.Partial("CreateCat", null, null)
在第二个参数之上(带有空值)表示模型对象。
然而,出乎意料的是,以下问题解决了我的问题:
@Html.Partial("CreateCat", new Category(), null)
为什么空对象在这种情况下工作但null不是?
还有其他更好的方法来渲染具有不同模型类型的强类型局部视图。
答案 0 :(得分:3)
除非您想使用父模型或不使用模型,否则应始终传入适当的模型以获取部分视图。传入null是愚蠢的,如果你不想在局部视图中使用实例化模型那么为什么你的局部视图会使用模型呢?在这种情况下,我认为新的Category()是正确的选择。但是,我总是看到子模型传递给部分
@Html.Partial("CreateCat", Model.Category)
需要做你正在做的事情似乎很奇怪,但我不确定你是如何使用局部视图的。