9

在 ASP.NET MVC 中并使用 Razor,我有一个视图(父级)调用另一个视图(子级)作为部分视图。两者都是强类型,但它们具有不同的模型类型。

通常,在这些情况下,我们会显式地将模型从父视图传递给子视图。

@Html.Partial("Child", Model)

我们也可以选择不明确指定要传递的模型,在这种情况下,父视图将尝试将自己的模型传递给子视图。如果类型匹配并且在大多数情况下是可取的,则此方法有效。

@Html.Partial("Child")

但是,就我而言,我真的希望父视图不要尝试将任何内容传递给子视图。我该怎么做?

我想过尝试null明确通过:

@Html.Partial("Child", null)

但是这样还是把父的Model传给子View,导致报错:The model item passed into the dictionary is of type 'A', but this dictionary requires a model item of type 'B'.

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

4

3 回答 3

11

试试这个:

@Html.Partial("Child", null, new ViewDataDictionary<ChildType>(childInstance/*this can be null*/))
于 2013-06-24T21:56:36.157 回答
5

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

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

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

于 2013-06-24T20:57:54.563 回答
1

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

现在......对我来说,仅仅因为“模型尚不存在”(AKA 尚未在数据库中)的概念上的微妙性,这项工作并不值得。

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

于 2013-06-24T21:53:25.917 回答