自定义编辑器模板未正确设置复选框值
本文关键字:设置 复选框 编辑器 自定义 | 更新日期: 2023-09-27 18:16:39
我为布尔类型创建了一个编辑器模板,我的问题是当模型属性不可为空时,复选框的默认行为被修改,例如,如果模型值是true
,则视图中的复选框没有被选中。我做错了什么?这是代码。
@model Nullable<bool>
@{
var listItems = new[]
{
new SelectListItem { Value = "null", Text = "Sin Valor" },
new SelectListItem { Value = "true", Text = "Si" },
new SelectListItem { Value = "false", Text = "No" }
};
}
@if (ViewData.ModelMetadata.IsNullableValueType)
{
@Html.DropDownListFor(model => model.Value, listItems)
}
else
{
@Html.CheckBox("", ViewData.TemplateInfo.FormattedModelValue)
}
不确定您在复选框中使用的ViewData.ModelMetadata.v
意味着什么。
@model Nullable<bool>
@{
var listItems = new[]
{
new SelectListItem { Value = "null", Text = "Sin Valor" },
new SelectListItem { Value = "true", Text = "Si" },
new SelectListItem { Value = "false", Text = "No" }
};
}
@if (ViewData.ModelMetadata.IsNullableValueType)
{
@Html.DropDownList("", new SelectList(listItems, "Value", "Text", Model))
}
else
{
@Html.CheckBox("", Model.Value)
}
这个例子详细展示了包含Yes, No和Not Set值的下拉列表的布尔模板的实现,并且还处理空bool值。灵感来自上面的Darin Dimitrov和Jorge -谢谢。
模型Student.cs
[Display(Name = "Present:")]
[UIHint("YesNo")]
public bool? IsPresent { get; set; }
DisplayTemplates:YesNo.cshtml
@model Nullable<bool>
@if (Model.HasValue)
{
if (Model.Value)
{ <text>Yes</text> }
else
{ <text>No</text> }
}
else
{ <text>Not Set</text> }
EditorTemplates:YesNo.cshtml
@model Nullable<bool>
@{
var listItems = new[]
{
new SelectListItem { Value = "null", Text = "Not Set" },
new SelectListItem { Value = "true", Text = "Yes" },
new SelectListItem { Value = "false", Text = "No" }
};
}
@if (ViewData.ModelMetadata.IsNullableValueType)
{
@Html.DropDownList("", new SelectList(listItems, "Value", "Text", Model))
}
else
{
@Html.CheckBox("", Model.Value)
}
视图:
<div class="editor-label">
@Html.LabelFor(model => model.IsPresent )
</div>
<div class="editor-field">
@Html.EditorFor(model => model.IsPresent )
@Html.ValidationMessageFor(model => model.IsPresent )
</div>