重写下拉列表的视图列(MVC3、实体框架)
本文关键字:实体 框架 MVC3 下拉列表 视图 重写 | 更新日期: 2023-09-27 17:57:01
当我使用从实体框架和设计器自动创建控制器/模型/视图时,我得到了一个非常干净的编辑表单。 1 对 1 关系之一创建一个下拉列表,该下拉列表向用户显示特定列中的值,但我希望它使用另一列/属性。
这是怎么做到的?
(仅供参考,我不是在 MVVM 中寻找一个类以及如何在视图模型中隔离它。 我没有带宽来学习和使用视图模型类重新创建此应用程序。
<div class="editor-label">
@Html.LabelFor(model => model.Domain, "Domain1")
</div>
<div class="editor-field">
@Html.DropDownList("Domain", String.Empty))
@Html.ValidationMessageFor(model => model.Domain)
</div>
控制器:
public ActionResult Edit(int id)
{
ClientJob clientjob = db.ClientJobs.Find(id);
ViewBag.ClientId = new SelectList(db.Clients, "Id", "ClientName", clientjob.ClientId);
ViewBag.CurrencyType = new SelectList(db.CurrencyTypes, "Id", "TypeName", clientjob.CurrencyType);
ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainName", clientjob.Domain);
ViewBag.JobType = new SelectList(db.JobTypes, "Id", "JobTypeName", clientjob.JobType);
ViewBag.DatabaseServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.DatabaseServer);
ViewBag.ProcessingServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.ProcessingServer);
ViewBag.QueryServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.QueryServer);
return View(clientjob);
}
如果我正确理解您的问题,您想传递要显示的项目列表而不是默认值?
我是这样做的:
<div class="editor-label">
@Html.LabelFor(model => model.Domain, "Domain1")
</div>
<div class="editor-field">
@Html.DropDownListfor(model => model.Domain, ViewData["DomainSelects"] as IEnumerable<SelectListItem>, "Select domain")
@Html.ValidationMessageFor(model => model.Domain)
</div>
然后在控制器中,确保在视图数据中设置DomainSelects
。选择列表项的值属性是应为"域"设置的值。因此,如果它是一个 FK,它将是一个 id。
我使用这样的代码(伪代码)
ViewData["DomainSelects"] = domains.Select(domain => new SelectListItem() { Value = SqlFunctions.StringConvert((double)domain.Id), Text = domain.Name});
刚刚创建的自动创建的代码选择列表:
ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainName", clientjob.Domain);
我只需要更改选择列表中的列名:
ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainType", clientjob.Domain);
在控制器中,准备整个列表
ViewBag.YourTypeCollection = context.YourTypes.ToList();
在视图中
@Html.DropDownListFor(m => m.Domain,
new SelectList((IEnumerable<YourType>)ViewBag.YourTypeCollection,
"Id",
"Name",
Model.Domain==null?1:Model.Domain.Id))
Id 是类 id 字段,名称是要显示的字段。将这些值替换为适合您的模型的值。在我的示例中,如果模型的值为 null,则选择第一项。