我的模特课:
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)
}
这样做很好地呈现一个复选框。当我更改复选框状态并尝试保存更改时,模型验证会抱怨值为“false”(或“true”)而不是预期的0或1。
如何修改editortemplate以允许转换值?
答案 0 :(得分:2)
<击> 你试过这个吗?
<div class="editor-label">
@Html.LabelFor(model => model.Active)
</div>
<div class="editor-field">
@Html.CheckBoxFor(model => model.Active != 0)
@Html.ValidationMessageFor(model => model.Active)
</div>
击> <击> 撞击>
您可以在模型中执行此操作:
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; }
}
}
答案 1 :(得分:1)
不要使用Html.CheckBox;而是使用Html.EditorFor。您需要在Views / Shared / EditorTemplates中定义一个名为ByteCheckbox.cshtml的文件,以便它可以正常工作。
答案 2 :(得分:0)
您也可以使用自定义模型装订器。
以下是小数的示例,但您可以为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();
}
}
答案 3 :(得分:0)
尝试这个
@model bool
<div class="editor-for">
@Html.CheckBox("", Model, new{@class="tickbox-single-line"})
<div>
答案 4 :(得分:0)
尝试一下:
@Html.CheckBox("Model", "Model")