2017-02-10 8 views
3

私はかみそりのビューでこれをやろうとしている:パスNULL可能ブールは働いていない

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

_Checkbox.cshtml:これは罰金限り動作します

@model bool? 

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

Model.SomeNullableBooleantrueまたはfalseのいずれかに設定されています。 しかし、値がnullの場合、私は次のエラーを取得する:

The model item passed into the dictionary is of type 'System.Data.Entity.DynamicProxies.MyAwesomeModel_EB6A12E11ECADA2C6B22289ACDF73813854383896F2E78956FDFFE6225F0404F', but this dictionary requires a model item of type 'System.Nullable`1[System.Boolean]'.

モデル(MyAwesomeModel)内のNULL可能なプロパティは、次のように定義されています

public bool? SomeNullableBoolean { get; set; } 

任意のアイデア私はこれをさらに調査する必要がありますか?

+0

ある場合、ブール値はnullにすることはできません。 – Pavvy

+1

'null'の部分モデルにモデルを渡すと、デフォルトでモデルがメインビュー(あなたのケースでは' MyAwesomeModel')に渡されます –

+2

代わりに新しい 'ViewDataDictionary'を渡すことができます([this overload ](https://msdn.microsoft.com/en-us/library/system.web.mvc.html.partialextensions.partial(v = 118).aspx#M:System.Web.Mvc.Html.PartialExtensions .Partial%28System.Web.Mvc.HtmlHelper、System.String、System.Web.Mvc.ViewDataDictionary%29)) –

答えて

1

あなたはnullある部分にモデルを渡す、デフォルトではそれが故に(ので、あなたの場合には、メインビューにbool?あるモデルを想定していビューにMyAwesomeModelのその通過とインスタンスをモデルを使用しますエラー)。私が知っているようにあなたは条件付きで新しいViewDataDictionaryを渡す必要が

プロパティの値がnull

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

私はステファン・ミュエッケのアドバイスに従い、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 
} 

これは完璧に動作します!

関連する問題