28

我目前已经搭建了一个视图,其中我的模型的布尔属性被传递给 Html.EditorFor 助手:

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

一切都很好,但我真正想做的是把它按摩成一个下拉菜单,比如:

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

实现这一目标的最简单方法是什么?

谢谢,

克里斯

4

4 回答 4

29

你可以试试这里的东西:

<%= 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
        )
    ) %>
于 2013-03-18T14:57:56.160 回答
24

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
    ))
于 2013-10-02T15:47:56.267 回答
10

您也可以尝试使用 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"))
于 2014-01-16T13:21:41.733 回答
5

我从 Francois Borgies 的非常有用的答案中得到启发,因此我决定编写一个自定义方法,为可以在 @Html.DropDownList中使用的布尔值创建SelectList。当你有一个可以在每个视图中使用的辅助方法时,它会减少剃刀视图中所需的代码量。

我的项目在文件夹中有CustomHelpers.cs类:App_Code/Helpers

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 Helper,因为它创建SelectList,但它遵循 Rahul Rajat Singh 在他的优秀文章An Absolute Beginner's Tutorial on HTML Helpers 和在 ASP.NET MVC 中创建自定义 HTML Helpers 中提出的相同功能

于 2016-12-04T07:59:42.503 回答