我有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和字符串描述的列表 - 状态。
如何让它显示正确的价值? 任何帮助非常感谢!
答案 0 :(得分:3)
您检查过this bug
避免使用DropDownList
和SelectList
的相同名称。
答案 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; }
}
这样做会在表单加载后在下拉列表中显示一个选定的值。
我希望这会有所帮助:)