2013-03-18 45 views
20

我现在有脚手架在我的模型的布尔属性,都会传给Html.EditorFor帮助一个观点:转换布尔属性编辑器在MVC视图中的下拉列表

@Html.EditorFor(model => model.EndCurrentDeal) 

一切都很好,但什么我真的想要做的是按摩,如下所示:

<select> 
    <option value="true" selected="selected">Yes</option> 
    <option value="false">No</option> 
</select> 

什么是最简单的方法来实现呢?

感谢,

克里斯

+1

看到这个响应HTTP相同的功能:// stackoverflow.com/a/9885229/138071 – 2013-03-18 16:06:57

回答

20

你可以尝试像here

<%= Html.DropDownList(
    "", 
    new SelectList(
     new[] 
     { 
      new { Value = "true", Text = "Yes" }, 
      new { Value = "false", Text = "No" }, 
     }, 
     "Value", 
     "Text", 
     Model 
    ) 
) %> 

如果你想有一个默认值:

<%= Html.DropDownList(
     "", 
     new SelectList(
      new[] 
      { 
       new { Value = "", Text = "None" }, 
       new { Value = "true", Text = "Yes" }, 
       new { Value = "false", Text = "No" }, 
      }, 
      "Value", 
      "Text", 
      Model 
     ) 
    ) %> 
+0

如果'bool'值为空可以怎么办?如何创建一个null选项? – 2016-06-20 21:41:38

+0

我看到更新谢谢你。我也可以做'value =“null”'? – 2016-06-21 16:15:41

19

MVC 4

@*/////////////////// bool ////////////////////////////////*@ 
@model bool 

@Html.DropDownListFor(m => m, new SelectList(
     new[] 
     { 
      new { Value = "true", Text = "Yes" }, 
      new { Value = "false", Text = "No" }, 
     }, 
     "Value", 
     "Text", 
     Model 
    )) 

@*/////////////////// bool? ////////////////////////////////*@  
@model bool? 

@Html.DropDownListFor(m => m, new SelectList(
     new[] 
     { 
      new { Value = "", Text = "(none)" }, 
      new { Value = "true", Text = "Yes" }, 
      new { Value = "false", Text = "No" }, 
     }, 
     "Value", 
     "Text", 
     Model 
    )) 
7

您也可以尝试Dictionary方法有点清洁,可以很容易地添加到View Model的构造函数中。

视图模型

//Define IDictionary interface 
public IDictionary<bool, string> options { get; set; } 

public YourViewModel() 
{ 
    // Default constructor 
     this.options = new Dictionary<bool, string>(); 
     this.options.Add(false, "no"); 
     this.options.Add(true, "yes"); 
} 




@Html.DropDownListFor(model => model.yourPropertyToEdit, new SelectList(Model.options, "Key", "Value")) 
4

我得到了启发与弗朗索瓦Borgies非常有用的答案,所以我决定写为布尔价值创造的SelectList一个自定义的方法,可以在@Html使用.DropDownList。如果您有一个可以在每个视图中使用的帮助器方法,那么它可以减少剃须刀视图中所需的代码量。

我的项目有CustomHelpers.cs类文件夹:App_Code文件/助手

namespace YourProjectName.App_Code.Helpers 
{ 
    public static class CustomHelpers 
    { 
     public static SelectList SelectListForBoolean(object selectedValue = null) 
     { 
      SelectListItem[] selectListItems = new SelectListItem[2]; 

      var itemTrue = new SelectListItem(); 
      itemTrue.Value = "true"; 
      itemTrue.Text = "Yes"; 
      selectListItems[0] = itemTrue; 

      var itemFalse = new SelectListItem(); 
      itemFalse.Value = "false"; 
      itemFalse.Text = "No"; 
      selectListItems[1] = itemFalse; 

      var selectList = new SelectList(selectListItems, "Value","Text", selectedValue); 

      return selectList; 
     }   
    } 
} 

创建视图中,可以按如下方式使用它:

@model Foo 
@using YourProjectName.App_Code.Helpers; 
... 
@Html.DropDownList("EndCurrentDeal", CustomHelpers.SelectListForBoolean(), "-select-") 

编辑查看

@model Bar 
@using YourProjectName.App_Code.Helpers; 
... 
@Html.DropDownList("EndCurrentDeal", CustomHelpers.SelectListForBoolean(Model.EndCurrentDeal), "-select-") 

虽然帮助我的方法是不是纯HTML助手,因为它创造的SelectList, - 它仍然遵循由拉胡尔·辛格拉雅介绍,在他的优秀文章An Absolute Beginner's Tutorial on HTML Helpers and Creating Custom HTML Helpers in ASP.NET MVC