2011-11-30 132 views
0

我爲布爾類型創建了一個編輯器模板,我的問題是模型屬性不可爲空,複選框的默認行爲被修改,例如如果themodel值爲true,那麼複選框在視圖中出現未經檢查。我究竟做錯了什麼???這是代碼。自定義編輯器模板設置不正確複選框值

@model Nullable<bool> 

@{ 
    var listItems = new[] 
    { 
     new SelectListItem { Value = "null", Text = "Sin Valor" }, 
     new SelectListItem { Value = "true", Text = "Si" }, 
     new SelectListItem { Value = "false", Text = "No" } 
    }; 

} 

@if (ViewData.ModelMetadata.IsNullableValueType) 
{ 

    @Html.DropDownListFor(model => model.Value, listItems) 
} 
else 
{ 
    @Html.CheckBox("", ViewData.TemplateInfo.FormattedModelValue) 
} 

回答

1

不確定您在複選框中使用的ViewData.ModelMetadata.v的含義。您是否嘗試過:

@model Nullable<bool> 

@{ 
    var listItems = new[] 
    { 
     new SelectListItem { Value = "null", Text = "Sin Valor" }, 
     new SelectListItem { Value = "true", Text = "Si" }, 
     new SelectListItem { Value = "false", Text = "No" } 
    }; 
} 

@if (ViewData.ModelMetadata.IsNullableValueType) 
{ 
    @Html.DropDownList("", new SelectList(listItems, "Value", "Text", Model)) 
} 
else 
{ 
    @Html.CheckBox("", Model.Value) 
} 
+0

我修改了問題,你可以看到我的舊代碼。我正在嘗試做什麼 – Jorge

0

這個例子詳細說明的布爾模板包含Yes,No和未設置值的下拉列表的實施,並處理空值的布爾值。受到Darin Dimitrov和Jorge的啓發 - 謝謝。

型號 Student.cs

[Display(Name = "Present:")] 
    [UIHint("YesNo")] 
    public bool? IsPresent { get; set; } 

DisplayTemplates: YesNo.cshtml

@model Nullable<bool> 

@if (Model.HasValue) 
{ 
    if (Model.Value) 
     { <text>Yes</text> } 
    else 
     { <text>No</text> } 
} 
else 
    { <text>Not Set</text> } 

EditorTemplates: YesNo.cshtml

@model Nullable<bool> 

@{ 
    var listItems = new[] 
    { 
     new SelectListItem { Value = "null", Text = "Not Set" }, 
     new SelectListItem { Value = "true", Text = "Yes" }, 
     new SelectListItem { Value = "false", Text = "No" } 
    }; 
} 

@if (ViewData.ModelMetadata.IsNullableValueType) 
{ 
    @Html.DropDownList("", new SelectList(listItems, "Value", "Text", Model)) 
} 
else 
{ 
    @Html.CheckBox("", Model.Value) 
} 

查看:

<div class="editor-label"> 
     @Html.LabelFor(model => model.IsPresent) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.IsPresent) 
     @Html.ValidationMessageFor(model => model.IsPresent) 
    </div> 
相關問題