用不同的模型呈现强类型的局部视图
本文关键字:强类型 局部 视图 模型 | 更新日期: 2023-09-27 18:05:30
我有两个观点:1)注册-创建用户帐户的主视图2)类别-如果注册视图组合字段中没有类别,则动态添加类别的部分视图。
当用户在注册时单击添加类别时,类别视图显示为jQuery对话框。该视图显示了组成新类别所需的字段,如名称和描述。因此,它有一个单独的模型。
在get页面上一切正常,但是在post页面上,如果有一些验证错误,页面需要重新加载用户提供程序的值来进行纠正,而不是抛出以下错误:
Exception Details: System。InvalidOperationException:传入字典的模型项是'Delight.Models '类型。,但此字典需要一个类型为"Delight.Models.Category"的模型项。
我认为使用以下语句可能会导致这个问题(因为它没有指定用于部分视图的模型对象):
@Html.Partial("CreateCat")
然而,使用下面的重载也不能解决问题:
@Html.Partial("CreateCat", null, null)
第二个参数(空值)上面表示模型对象。
然而,出乎意料的是,下面解决了我的问题:
@Html.Partial("CreateCat", new Category(), null)
为什么空对象在这种情况下工作,而null不是?
是否有其他更好的方法来呈现不同模型类型的强类型局部视图
除非您想使用父视图的模型或者不使用模型,否则您应该始终为局部视图传递适当的模型。传入null是愚蠢的,如果你不想在你的分部视图中实例化模型,那么为什么你的分部视图要使用模型呢?在这种情况下,我认为new Category()是正确的选择。然而,我总是看到子模型被传递到partials
@Html.Partial("CreateCat", Model.Category)
关于需要做你正在做的事情似乎很奇怪,但我不确定你是如何使用部分视图的