I am using the twitter bootstrap framework, so to get the EditorFor and DisplayFor methods to output what I need, I created custom templates for each of the types like string, text, password etc. For my login page I want a RememberMe bool, so as before, I created the following template and put in in Boolean.cshtml:
@model bool
<div class="control-group">
<div class="controls">
<label class="checkbox">
@Html.CheckBoxFor(m => m, new {@class = "checkbox"})
@Html.LabelFor(m => m)
</label>
</div>
</div>
Pretty simple, but when I use:
@Html.EditorFor(m => m.RememberMe)
I get an exception saying the value being bassed cannot be null:
The model item passed into the dictionary is null, but this dictionary requires a non-null model item of type 'System.Boolean'.
What am I missing? Seems like it should be straight forward. The field on the model object looks like follows:
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
Thanks.
UPDATE: So it seems that in the end it's a matter of creating an empty view model object and passing it to the view instead of letting MVC create one on it's own.
I would not do it that way. If the value can be null, I would make sure that your editor template has nullable boolean as the model type. So your editor template (in Views\Shared\EditorTemplates\Boolean.cshtml) would be:
@model Boolean?
@Html.CheckBox("", Model.HasValue && Model.Value)
And then in the razor of your main view, you could have:
<div class="control-group">
<div class="controls">
<label class="checkbox">
@Html.EditorFor(m => m, new {@class = "checkbox"})
@Html.LabelFor(m => m)
</label>
</div>
</div>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With