试图在MVC中设置下拉列表

时间:2010-06-15 00:33:16

标签: c# asp.net asp.net-mvc

我几乎已经解决了这个问题但需要一点点推动。

这就是我所拥有的:

在数据库中,我有一个名为active的字段,它是一个位字段(True / False)

我在View窗体上放了一个下拉列表,如下所示:

<%= Html.DropDownList("lstActive", new SelectList((IEnumerable)ViewData["ActiveList"])) %>

在我的控制器中,我只是使用此代码在下拉列表中生成True / False:

        List<string> activeList = new List<string>();
        activeList.Add("True");
        activeList.Add("False");

        ViewData["ActiveList"] = new SelectList(activeList);

我想绑定到名为active的数据库中的字段,并在下拉列表中选择它。当我这样看时,我得到了这个:

alt text http://rjmueller.net/sitesimages/temp/dropdown.gif

所以问题是:

显然我没有指向Value和Text属性,但在这种情况下是什么? 如何选择数据库中的值?

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:3)

首先,这可能更适合单选按钮,而不是选择。其次,你真的应该有一个视图模型,其属性为IEnumerable<SelectListItem>,为select提供值。您可以直接在模型中构建它。

 var model = new ViewModel();
 model.ActiveList = new List<SelectListItem>
                    {
                        new SelectListItem { Text = "Yes", Value = "true" },
                        new SelectListITem { Text = "No", Value = "false" }
                    };
 model.Active = false; // this will be the default

 return View( model );

然后在您的视图中(强烈输入您的视图模型类型):

 <%= Html.DropDownListFor( m => m.Active, Model.ActiveList ) %>

使用单选按钮,可以省略列表(因为只有两个选项)。

 <%= Html.RadioButtonFor( m => m.Active, true ) %> Yes
 <%= Html.RadioButtonFor( m => m.Active, false ) %> No

答案 1 :(得分:1)

以下是一些建议。

首先,你的DropdownList的名字是“lstActive”,所以如果你创建一个List&lt; SelectListItem&gt;被称为“lstActive”并在ViewData中传回,你不需要做任何与拳击有关的事情。然后您的声明如下:

<%= Html.DropDownList("lstActive") %>
很容易,呵呵?

在控制器中,您可以创建列表。这是我用过的方法:

    private List<SelectListItem> GetAccounts(User user)
    {
        var items = new List<SelectListItem>();
        foreach (Account account in user.Accounts)
        {
            var item = new SelectListItem();
            item.Text = account.Name;
            item.Value = account.AccountId.ToString();
            if (ActiveAccount == account.AccountId)
                item.Selected = true;
            items.Add(item);
        }
        return items;
    }

基本上,我想指出的是你可以在你想要显示为选中的SelectListItem上设置一个属性。在这里,我使用自己的用户和帐户代码,但您将根据数据库查询替换自己的数据。

答案 2 :(得分:1)

首先,您要重新创建ViewList数据的SelectList,您应该按如下方式声明DropBox:

<%= Html.DropDownList("lstActive", ViewData["ActiveList"]) %>

其次,不是在控制器上创建通用列表,而是创建一个SelectList并向其添加SelectListItems:

var activeList = new SelectList 
{
  new SelectListItem { Text = "True", Value = true },
  new SelectListItem { Text = "False", Value = false }
};

ViewData["ActiveList"] = activeList;

答案 3 :(得分:0)

这应该澄清:

Drop-down Lists and ASP.NET MVC

对于每个选择列表元素,您需要设置文本和值属性...

答案 4 :(得分:0)

一种解决方案如下:

型号:

public class NameValue
{
    public string Name { get; set; }
    public string Value { get; set; }
}

控制器:

string currentActiveValue = myDB.active.ToString(); 
List<NameValue> yesNoList = new List<NameValue> 
                   {      
                        new NameValue { Name = "Yes", Value = "True" },      
                        new NameValue { Name = "No", Value = "False" }      
                   };   

SelectList myActiveList = new SelectList(yesNoList, "Name", "Value", currentActiveValue);
ViewData["ActiveList"] = myActiveList;

查看:

div>Is Active: <%= Html.DropDownList("ActiveList") %></div>