ASP.NET MVC中使用EditorFor时如何将布尔值转为自定义字符串显示
布尔类型Gender属性自定义下拉文本解决方案
默认ASP.NET MVC的布尔类型EditorFor模板会自动生成值为True/False的下拉选项,要替换为自定义的男女文本,可选用以下两种方案:
方案1:自定义编辑器模板(无需修改现有EditorFor调用)
- 首先在项目
Views/Shared目录下新建EditorTemplates文件夹(已存在则跳过) - 在该文件夹内新增名为
Gender.cshtml的分部视图,写入如下代码:
@model bool? @{ var genderOptions = new List<SelectListItem> { new SelectListItem { Text = "男", Value = bool.TrueString, Selected = Model == true }, new SelectListItem { Text = "女", Value = bool.FalseString, Selected = Model == false } }; } @Html.DropDownListFor(m => m, genderOptions, "请选择性别")
- 找到你的Gender属性定义,添加
UIHint注解绑定自定义模板:
[UIHint("Gender")] public bool Gender { get; set; } // 如果是可空布尔则定义为 public bool? Gender { get; set; }
修改完成后原有视图的EditorFor代码无需任何改动,运行即可看到男女选项。
方案2:直接替换EditorFor为DropDownListFor
如果不想新增模板文件,可以直接修改视图代码,将原有的@Html.EditorFor(model => model.EmployeeInfo.Person.Gender)替换为以下代码即可:
@Html.DropDownListFor(model => model.EmployeeInfo.Person.Gender, new List<SelectListItem> { new SelectListItem { Text = "男", Value = "true" }, new SelectListItem { Text = "女", Value = "false" } }, "请选择性别") @Html.ValidationMessageFor(model => model.EmployeeInfo.Person.Gender)
注意事项
如果你的Gender为非可空布尔类型,建议给属性设置默认值,或者移除下拉的“请选择性别”默认空选项,避免提交时出现验证错误。
内容的提问来源于stack exchange,提问作者Hadis Sulejmani
相关产品推荐
相关产品推荐

