DropDownList - 以编辑形式显示的选定值

时间:2012-05-11 10:26:43

标签: c# html asp.net-mvc asp.net-mvc-3 drop-down-menu

我有MVC3网站的编辑表格。在此表单上有DropDownList,它显示了可以选择的值列表。我希望它设置为先前选择的值(在创建表单上)。该值位于Model.Status中。我认为这段代码可行:

 @Html.DropDownList("Status",
           new SelectList(ViewBag.Status as System.Collections.IEnumerable, "Id", "Status", Model.Status))

但DropDownList始终设置在列表的第一个值上。我已检查 - 正确的值在Model.StatusModel.Status的值是列表中的状态ID。 ViewBag.Status是一个包含id和字符串描述的列表 - 状态。

如何让它显示正确的价值? 任何帮助非常感谢!

3 个答案:

答案 0 :(得分:3)

您检查过this bug

避免使用DropDownListSelectList的相同名称。

答案 1 :(得分:1)

@Html.DropDownListFor(x=>x.SelectedItemId,
                     new SelectList(ViewBag.Status as System.Collections.IEnumerable,"Id",
                     "Status"),"Select Item")

但如果我正在编写此代码,我将删除ViewBag并将其更改为使用另一个强类型对象

public class YourMainViewModel
{
  public int ID { set;get;}

  public int SelectedItemId { set;get;}
  public IEnumerable<Item> Items();
  //other properties
}

public class Item
{
  public int Id { set;get;}
  public string Status { set;get;}
}

而不是在Viewbag中发送集合,我现在将使用我的新模型属性

public ActionResult EditUser(int id)
{
  var user=myRepositary.GetUser(id);
  user.Items=myRepositary.GetAllItems();
  user.SelectedItemId=5; // replace with the value from your database here,
}

现在在YourMainViewModel强类型的我的视图中,我会写这个

@Html.DropDownListFor(x=>x.SelectedItemId,
                     new SelectList(Model.Items,"Id",
                     "Status"),"Select Item")

答案 2 :(得分:0)

以下是您可以在场景中修改和使用的示例代码。我有一个编辑视图,在此视图中是下拉列表中的银行列表,并且已在列表中预先选择与此应用程序关联的银行。

我的观点:

@model MyProject.ViewModels.MyViewModel

我的银行下拉:

<td><b>Bank:</b></td>
<td>
     @Html.DropDownListFor(
          x => x.BankId,
          new SelectList(Model.Banks, "Id", "Name", Model.BankId),
          "-- Select --"
     )
     @Html.ValidationMessageFor(x => x.BankId)
</td>

我的MyViewModel:

public class MyViewModel
{
     // Partial class

     public int BankId { get; set; }
     public IEnumerable<Bank> Banks { get; set; }
}

我的编辑操作方法:

public ActionResult Edit(int id)
{
     // Get the required application
     GrantApplication application = grantApplicationService.FindById(id);

     // Mapping
     MyViewModel viewModel = (MyViewModel)
          grantApplicationMapper.Map(
          application,
          typeof(GrantApplication),
          typeof(MyViewModel)
     );

     // BankId comes from my table.  This is the unique identifier for the bank that was selected when the application was added

     // Get all the banks
     viewModel.Banks = bankService.FindAll().Where(x => x.IsActive);

     return View(viewModel);
}

我的银行班:

public class Bank
{
     public int Id { get; set; }
     public string Name { get; set; }
     public bool IsActive { get; set; }
}

这样做会在表单加载后在下拉列表中显示一个选定的值。

我希望这会有所帮助:)