在ASP.NET MVC中并使用Razor,我有一个View(父)将另一个View(child)调用为partial。两者都是强类型的,但它们具有不同的模型类型。
通常,在这些情况下,我们将模型从父视图显式传递给子视图。
@Html.Partial("Child", Model)
我们也可以选择不明确指定要传递的Model,在这种情况下,父View将尝试将自己的Model传递给子View。如果类型匹配并且在大多数情况下是可取的,则此方法有效。
@Html.Partial("Child")
但是,在我的情况下,我真的希望父视图不尝试将任何内容传递给子视图。我该怎么做?
我想过尝试明确地传递null
:
@Html.Partial("Child", null)
但是这仍然会将父级模型传递给子视图,从而导致错误:The model item passed into the dictionary is of type 'A', but this dictionary requires a model item of type 'B'.
(作为旁注,子视图是其模型的创建视图,这就是我没有实例传递给它的原因。)
答案 0 :(得分:11)
试试这个:
@Html.Partial("Child", null, new ViewDataDictionary<ChildType>(childInstance/*this can be null*/))
答案 1 :(得分:5)
我理解你不想通过模型的原因是你的输入被清空了? 如果是这种情况,您可以将新模型传递给此部分:
@Html.Partial("Child", new Model())
由于模型是新的,因此不会填充任何值。
答案 2 :(得分:1)
您可以让您的创建表单不是强类型的...制作您的输入以便一旦发布,您将在控制器操作中绑定一个模型。
现在......对我来说,仅仅因为“模型不存在”(AKA还没有在数据库中)的概念上的微妙之处,这项工作是不值得的。
在我的情况下,我创建虚拟模型只是为了在某些字段中设置默认值(例如:设置今天日期,下拉列表中的默认值等)