0

我的模型课:

public class StatusList
{
   public int StatusID {get;set;}
   [UIHint("ByteCheckbox")]
   public byte Active {get;set;}
}

在 /Views/Shared/EditorTemplates 我创建了一个名为 ByteCheckbox.cshtml 的文件

editortemplate ByteCheckbox 包含(我的第三次尝试):

@model byte
@if (Model == 1)
{
    @Html.CheckBox("", true)
}
else
{
    @Html.CheckBox("", false) 
}

这样做很好地呈现了一个复选框。当我更改复选框状态并尝试保存更改时,模型验证会抱怨该值为“假”(或“真”)而不是预期的 0 或 1。

如何修改编辑器模板以允许翻译值?

4

5 回答 5

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; }
   }
}
于 2012-04-09T19:14:43.340 回答
1

不要使用 Html.CheckBox;而是使用 Html.EditorFor。您需要在 Views/Shared/EditorTemplates 中定义一个名为 ByteCheckbox.cshtml 的文件才能正常工作。

于 2012-04-09T19:37:32.830 回答
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();
    }

}
于 2012-08-13T21:42:08.923 回答
0

试试这个

    @model bool

   <div class="editor-for">
       @Html.CheckBox("", Model, new{@class="tickbox-single-line"})
   <div>
于 2017-07-05T08:03:25.043 回答
0

试试这个:

@Html.CheckBox("Model", "Model")
于 2019-11-01T10:37:03.663 回答