我几乎已经解决了这个问题但需要一点点推动。
这就是我所拥有的:
在数据库中,我有一个名为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属性,但在这种情况下是什么? 如何选择数据库中的值?
任何帮助都将不胜感激。
答案 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)
答案 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>