【问题标题】:Pass nullable boolean to partial view not working when value is null当值为空时,将可为空的布尔值传递给部分视图不起作用
【发布时间】:2017-06-28 11:10:22
【问题描述】:

我正试图在我的剃刀视图中做到这一点:

@{ Html.RenderPartial("_Checkbox", Model.SomeNullableBoolean); }

_Checkbox.cshtml:

@model bool?

@if (Model == null)
{
    Some code
}
else if (Model == true)
{
    Some other code
}

只要将Model.SomeNullableBoolean 设置为truefalse,它就可以正常工作。 但如果值为 null,我会收到以下错误:

传入字典的模型项是类型 'System.Data.Entity.DynamicProxies.MyAwesomeModel_EB6A12E11ECADA2C6B22289ACDF73813854383896F2E78956FDFFE6225F0404F', 但是这本词典需要一个类型的模型项 'System.Nullable`1[System.Boolean]'。

模型内的可空属性(MyAwesomeModel)定义如下:

public bool? SomeNullableBoolean { get; set; }

任何想法我应该如何进一步调查?

【问题讨论】:

  • 据我所知,布尔值不能为空。
  • 当您将模型传递给 null 的部分时,默认情况下它会在主视图中传递模型(在您的情况下为 MyAwesomeModel
  • 您或许可以传递一个新的ViewDataDictionary(使用this overload
  • @StephenMuecke 谢谢!那行得通:)

标签: c# asp.net-mvc razor partial-views


【解决方案1】:

当您将模型传递给 null 的部分时,默认情况下它将在主视图中使用该模型,因此在您的情况下,它将 MyAwesomeModel 的实例传递给期望模型的视图bool?(因此出现错误)。

如果属性的值为null,则需要有条件地传递一个新的ViewDataDictionary

@{ Html.RenderPartial("_Checkbox", Model.SomeNullableBoolean.HasValue ?
    new ViewDataDictionary(){ Model = Model.SomeNullableBoolean } : 
    new ViewDataDictionary()); }

【讨论】:

    【解决方案2】:

    我听从了 Stephen Muecke 的建议,采用了ViewDataDictionary 方法:

    @{ Html.RenderPartial("_Checkbox", null, new ViewDataDictionary { { "BoolValue", Model.SomeNullableBoolean}}); }
    

    _Checkbox.cshtml:

    @{
        var theValue = (bool?) ViewData["BoolValue"];
    }
    
    @if (theValue == null)
    {
        something
    }
    else if (theValue == true)
    {
        something
    }
    else
    {
        something
    }
    

    这很好用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多