2013-03-18 28 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