使用EditorTemplate将字节显示为复选框?
我的模特课:
public class StatusList { public int StatusID {get;set;} [UIHint("ByteCheckbox")] public byte Active {get;set;} }
在/ Views / Shared / EditorTemplates中,我创建了一个名为ByteCheckbox.cshtml的文件
editortemplate ByteCheckbox包含(我的第3次尝试):
@model byte @if (Model == 1) { @Html.CheckBox("", true) } else { @Html.CheckBox("", false) }
这样做很好地呈现一个复选框。 当我更改复选框状态并尝试保存更改时,模型validation会抱怨值为“false”(或“true”)而不是预期的0或1。
如何修改editortemplate以允许转换值?
你试过这个吗?
@Html.LabelFor(model => model.Active) @Html.CheckBoxFor(model => model.Active != 0) @Html.ValidationMessageFor(model => model.Active)
您可以在模型中执行此操作:
public class StatusList { public int StatusID {get;set;} public byte Active {get;set;} [NotMapped] public bool ActiveBool { get { return Active > 0; } set { Active = value ? 1 : 0; } } }
不要使用Html.CheckBox; 而是使用Html.EditorFor。 您需要在Views / Shared / EditorTemplates中定义一个名为ByteCheckbox.cshtml的文件,以便它可以正常工作。
您还可以使用自定义模型绑定器。
这是一个十进制的示例,但您可以为byte
类型执行此byte
。
public class DecimalModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { dynamic valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (valueProviderResult == null) { return base.BindModel(controllerContext, bindingContext); } return ((string)valueProviderResult.AttemptedValue).TryCDec(); } }
试试这个
@model bool @Html.CheckBox("", Model, new{@class="tickbox-single-line"})