【问题标题】:How to prevent view from passing its model to the partial view, but instead pass null?如何防止视图将其模型传递给局部视图,而是传递 null?
【发布时间】:2013-06-25 05:56:36
【问题描述】:

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

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

@Html.Partial("Child", Model)

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

@Html.Partial("Child")

然而,在我的情况下,我真的希望父视图尝试将任何内容传递给子视图。我该怎么做?

我想过尝试显式传递null

@Html.Partial("Child", null)

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

(顺便说一句,子视图是其模型的创建视图,这就是为什么我没有实例可以传递给它的原因。)

【问题讨论】:

    标签: asp.net-mvc razor


    【解决方案1】:

    试试这个:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 有点。更准确地说,原因是,当调用视图时,概念上 没有该模型的实例。创建和传递尚不存在且可能根本不提交的模型实例只是为了满足视图引擎,我感到不舒服。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-02-01
        • 1970-01-01
        • 2014-02-05
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多