0

私のモデルクラス:

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) 
}

これを行うと、チェックボックスが適切にレンダリングされます。チェックボックスのステータスを変更して変更を保存しようとすると、モデルの検証で、値が予想される 0 または 1 ではなく「false」(または「true」) であると不平が示されます。

値を翻訳できるようにエディタテンプレートを変更するにはどうすればよいですか?

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 に答える