班级Unidade:public class Unidade{ public int UnidadeId { get; set; } public string Apelido { get; set; } public string Descricao { get; set; }}在Insumo类中两次使用,如Unidade和UnidadeConsumopublic class Insumo{ public int InsumoId { get; set; } public string Apelido { get; set; } public string Descricao { get; set; } public int UnidadeId { get; set; } public Unidade Unidade { get; set; } public int UnidadeConsumoId { get; set; } public Unidade UnidadeConsumo { get; set; }}要编辑Insumo,控制器中有两个EDIT操作:public ActionResult Edit(int? id){ Insumo insumo = db.Insumos.Find(id); if (insumo == null) return HttpNotFound(); ViewBag.UnddId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeId); ViewBag.UndConsId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeConsumoId); return View(insumo);}和后编辑:[HttpPost]public ActionResult Edit([Bind(Include = "InsumoId,Apelido,Descricao,UnidadeId,UnidadeConsumoId")] Insumo insumo){if (ModelState.IsValid) { db.Entry(insumo).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.UnddId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeId); ViewBag.UndConsId = new SelectList(db.Unidades, "UnidadeId", "Apelido", insumo.UnidadeConsumoId); return View(insumo); }用于显示要编辑的字段的视图包括两个用于选择两个单位的下拉列表:@model Gestor.Models.Insumo@{ ViewBag.Title = "Alterar"; Layout = "~/Views/Shared/_Layout.cshtml";}<h2>Alterar</h2>@using (Html.BeginForm()){@Html.AntiForgeryToken()<div class="form-horizontal"> <h4>Insumo</h4> <hr /> @Html.Partial("CopyEdit") <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Gravar" class="btn btn-default" /> </div> </div></div>}问题是返回到POST Edit操作后,所有字段都可以,但是UnidadeConsumoId始终为0,数据库中什至不存在什么?有人可以告诉我为什么它不返回期望值,即下拉列表中的所选值反映了if的ID吗?
1 回答
![?](http://img1.sycdn.imooc.com/545861b80001d27c02200220-100-100.jpg)
皈依舞
TA贡献1851条经验 获得超3个赞
因为您当前的代码正在渲染具有name属性value的SELECT元素UndConsId。
<select class="form-control" name="UndConsId">
<!-- options -->
</select>
为了使模型绑定生效,输入元素name 属性值应与http post操作方法中使用的参数/属性名称匹配。您的参数名称是UnidadeConsumoId,不是UndConsId
要解决此问题,UnidadeConsumoId请将作为DropDownList方法调用的第一个参数传递,以便它将使用呈现SELECT元素name UnidadeConsumoId。您可以将 传递ViewBag.UndConsId为第二个参数以显式指定用于构建 SELECT 元素的集合。
这应该工作
@Html.DropDownList("UnidadeConsumoId", ViewBag.UndConsId as SelectList,
new { @class = "form-control" })
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消