当value为null时,将nullable boolean传递给部分视图不起作用

时间:2017-02-10 07:21:45

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

我试图在我的剃刀视图中这样做:

private void button3_Click(object sender, EventArgs e)
        {
            HAP.HtmlWeb web = new HAP.HtmlWeb();
            HtmlAgilityPack.HtmlDocument doc = web.
               Load(@"https://mywebsite");
            string str = doc.DocumentNode.InnerText;
            MessageBox.Show(str);
        }

_Checkbox.cshtml:

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

只要将@model bool? @if (Model == null) { Some code } else if (Model == true) { Some other code } 设置为Model.SomeNullableBooleantrue,此方法就可以正常工作。 但是如果值为null,我会收到以下错误:

  

传递到字典中的模型项是类型的   ' System.Data.Entity.DynamicProxies.MyAwesomeModel_EB6A12E11ECADA2C6B22289ACDF73813854383896F2E78956FDFFE6225F0404F&#39 ;,   但是这个字典需要一个类型的模型项   ' System.Nullable`1 [System.Boolean]'

模型(false)中的可空属性定义如下:

MyAwesomeModel

我还应该如何进一步调查此事?

2 个答案:

答案 0 :(得分:1)

我遵循了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
}

这完美无缺!

答案 1 :(得分:1)

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

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

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