如何防止视图将其模型传递给局部视图,而是传递null?

时间:2013-06-24 20:52:57

标签: asp.net-mvc razor

在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'.

(作为旁注,子视图是其模型的创建视图,这就是我没有实例传递给它的原因。)

3 个答案:

答案 0 :(得分:11)

试试这个:

@Html.Partial("Child", null, new ViewDataDictionary<ChildType>(childInstance/*this can be null*/))

答案 1 :(得分:5)

我理解你不想通过模型的原因是你的输入被清空了? 如果是这种情况,您可以将新模型传递给此部分:

@Html.Partial("Child", new Model())

由于模型是新的,因此不会填充任何值。

答案 2 :(得分:1)

您可以让您的创建表单不是强类型的...制作您的输入以便一旦发布,您将在控制器操作中绑定一个模型。

现在......对我来说,仅仅因为“模型不存在”(AKA还没有在数据库中)的概念上的微妙之处,这项工作是不值得的。

在我的情况下,我创建虚拟模型只是为了在某些字段中设置默认值(例如:设置今天日期,下拉列表中的默认值等)