2011-11-30 51 views
3

我定义了这个editorTemplate来修改一个布尔类型的行为,我的问题是当类型为空时我想创建一个组合来改变默认值,我想要的,但我不知道如何选择来自模型的值。修改布尔类型的MVC默认行为

例如,如果值为true我希望使用SI值选择下拉列表,并且使用NO为false。现在,我知道我可以像这样得到模型的价值Model.Value,但我不知道如何传递给选择列表,具体取决于模型。这里是我的editorTemplate

@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("", listItems) 
} 
else 
{ 
    @Html.CheckBox("", ViewData.Model.Value) 
} 

回答

5

您可以设置这个就SelectListItemhttp://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem%28v=VS.100%29.aspx

@model Nullable<bool> 

@{ 
    var listItems = new[]{ 
     new SelectListItem { Value = "null", Text = "Sin Valor", Selected = !Model.HasValue }, 
     new SelectListItem { Value = "true", Text = "Si", Selected = Model.HasValue && Model.Value }, 
     new SelectListItem { Value = "false", Text = "No", Selected = Model.HasValue && !Model.Value} 
    }; 
} 

@if (ViewData.ModelMetadata.IsNullableValueType) 
{ 

    @Html.DropDownList("", listItems) 
} 
else 
{ 
    @Html.CheckBox("", ViewData.Model.Value) 
} 
+1

我想你会怎么达到的复选框的情况?您的编辑器模板仅适用于可以为空的类型。不过,我可能会在这里错过一些东西。 – Roman