使用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"})