用不同的模型呈现强类型的局部视图

本文关键字:强类型 局部 视图 模型 | 更新日期: 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)

关于需要做你正在做的事情似乎很奇怪,但我不确定你是如何使用部分视图的