填充ASP.NET MVC下拉列表

44

好的,我已经谷歌了几个小时并尝试了一切,但仍无法使任何东西起作用。我正在使用Sharp Architecture学习MVC并生成一些用于创建Client对象的基本表单。我希望通过一个美国州份列表来填充状态下拉列表,并让用户从中选择。我能够填充列表并获取返回值(以保存客户端),但是当我去编辑客户端时,客户端的当前状态未被选中。我已在SelectList中设置了选定的值:

<li>
    <label for="Client_StateProvince">StateProvince:</label>
    <div>
        <%= Html.DropDownListFor(c=>c.Client.StateProvince, new SelectList(Model.StateProvinces, "id", "Name", Model.Client.StateProvince), "-- Select State --")%>
    </div>
    <%= Html.ValidationMessage("Client.StateProvince")%>
</li>

这似乎还不够好。 我错过了什么吗?


请考虑重新编写您的问题标题,使其更具体。 - Dan Atkinson
1
我需要做的是有一个编辑页面,可以编辑(领域对象)的信息,在这种情况下是客户端对象。当我去编辑它时,我需要表单的状态部分是一个下拉列表,其中包含一些州的列表(标准内容),但在进入编辑模式后,我需要选择当前可编辑对象的状态。我已经填充了下拉列表,但当前状态没有被选中。一旦我将DropDownList的名称(此处由lambda表示)设置为状态的Id(我在下拉列表上使用的值字段的值),我就可以开始了。 - leebrandt
7个回答

78
<%= Html.DropDownListFor(c => c.Client.StateProvince.Id, 
                              new SelectList(Model.StateProvinces, 
                                             "id", 
                                             "Name", 
                                             Model.Client.StateProvince), 
                              "-- Select State --")%>

这样做就可以了。

希望能帮到其他人。

~Lee


你说得对,第一个参数需要与最后一个参数的类型相同。这对我也起作用了!谢谢。 - Patrick Desjardins

7

非常感谢,它对我非常有效!我将其用于在子类别上设置父级关系:

<%= Html.DropDownListFor(
 model => model.Category.ParentId,
 new SelectList(Model.Categories,
 "CategoryId",
 "Name",
  Model.Categories.Where(x => x.CategoryId == Model.Category.ParentId).Single()))%>

Jeroen


4
我用这种方法做到了。效果很好。
控制器
IFarmModelInterface service2 = new FarmModelRepository();
ViewData["Farms"] = new SelectList(service2.GetFarmNames(), "id", "FarmName", "XenApp");

查看

<%: Html.DropDownListFor(m => m.Farm, (ViewData["Farms"] as SelectList)) %>

3
public ActionResult  AllUsers()
{
    List<Users> users = userRep.GetUsers();
    var listUsers = (from u in users.AsEnumerable()
                     select new SelectListItem
                     {
                        Text = u.UserName,
                        Value = u.UserId.ToString(),
                        Selected = (u.UserId==6)
                     }).AsEnumerable();
    ViewBag.ListItems = listUsers;
    //ViewBag.SelectedItem = 2;
    return View();
}

在AllUsers.cshtml文件中

<p>@Html.DropDownList("ListItems")</p>

2
<%= Html.DropDownListFor(c => c.Client.StateProvince, new SelectList(Model.StateProvinces, "Id", "Name")) %> 

并且覆盖ToString()方法,使StateProvince返回Id,例如:

return Id.ToString();

这个方法可行,但并不是完美的解决方案...
丹尼斯

1
这是视图 - MVC控制器。
@Html.DropDownListFor(m => m.Entity, new ABC.Models.DropDownPopulate().MyMethod, new { @class = "form-control input-inline input-medium" })

MyMethod 获取数据列表并使用SelectListItems绑定下拉列表

 public List<SelectListItem> MyMethod
        {
            get
            {
                List<SelectListItem> dropdownList = new List<SelectListItem>();
                var items = new DropDown_Bl().GetAll();
                foreach (var item in items)
                {
                    SelectListItem dropdownItem = new SelectListItem();
                    dropdownItem.Value = item.RnID.ToString();
                    dropdownItem.Text = item.Description;
                    dropdownList.Add(dropdownItem);
                }
                dropdownList.Insert(0, new SelectListItem() { Text = "Please Select", Value = "", Selected = true });
                return dropdownList;
            }
        }

Dropdown_Bl中的GetAll方法 - 用于从数据库获取数据列表

  public List<My_Table> GetAll()
        {
            var Items = _Context.MyRepository.GetMany(q => q.Area == "ASD").ToList();
            return Items ;
        }

0
public ActionResult  AllUsers() {
    List<Users> users = userRep.GetUsers();
    var listUsers = (from u in users.AsEnumerable()
                     select new SelectListItem
                     {
                        Text = u.UserName,
                        Value = u.UserId.ToString(),
                        Selected = (u.UserId==6)
                     }).AsEnumerable();
   // ViewBag.ListItems = listUsers;
   ViewData["tempEmpList"]=listUsers;
    return View(); }

填充下拉列表

@Html.DropDownList("SelectedEmployee", new SelectList((IEnumerable) ViewData["tempEmpList"], "Id", "Name"))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接