1

我有带有编辑表单的 MVC3 网站。在此表单上,有一个 DropDownList 显示可以选择的值列表。我希望将其设置为先前选择的值(在创建表单上)。该值在 Model.Status 中。我认为这段代码可以工作:

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

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

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

4

3 回答 3

3

你检查过这个错误吗

避免使用DropDownList和的相同名称SelectList

于 2012-05-11T10:47:16.963 回答
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")
于 2012-05-11T11:06:21.917 回答
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>

我的视图模型:

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; }
}

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

我希望这有帮助 :)

于 2012-05-11T11:30:46.840 回答