首先,我有来自现有数据库的预定义模型。 我只想在MVC 5的编辑页面上显示现有值。
这就是我所做的:
控制器
public async Task<ActionResult> Edit(Guid? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
slik_data_a01 slik_data_a01 = await db.slik_data_a01.FindAsync(id);
if (slik_data_a01 == null)
{
return HttpNotFound();
}
//init DD
var selectedjs = (from x in db.master_segmenfasilitas
where x.sandi == slik_data_a01.kode_jenis_segmen
select new { x.fasilitas, x.sandi }).FirstOrDefault();
var jenissegmen = new SelectList((from x in db.master_segmenfasilitas
select new { x.fasilitas, x.sandi }).ToList(), "sandi", "fasilitas", selectedjs);
ViewBag.jenissegmen = jenissegmen;
return View(slik_data_a01);
}
我的观点是这样的:
<div class="form-group">
@Html.LabelFor(model => model.kode_jenis_segmen, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.kode_jenis_segmen, ViewBag.jenissegmen as SelectList, new{ @class = "form-control input-sm" })
@Html.ValidationMessageFor(model => model.kode_jenis_segmen, "", new { @class = "text-danger" })
</div>
</div>
但默认值始终显示SelectList
的第一个数据,
虽然我在控制器上定义了选定的值,但不是现有的。
任何帮助都非常感激。
答案 0 :(得分:1)
在将对象传递给最后一行的View方法之前,您需要在与DropDownListFor帮助器绑定的model属性中设置所选值,而不需要在SelectList
构造函数中设置所选值,因此将SelectList
创建代码更改为:
var jenissegmen = new SelectList((from x in db.master_segmenfasilitas
select new { x.fasilitas, x.sandi }).ToList(),
"sandi",
"fasilitas");
并且在模型属性中传递模型集选择值之前,帮助器将自行选择值:
slik_data_a01.kode_jenis_segmen = selectedjs;
ViewBag.jenissegmen = jenissegmen;
return View(slik_data_a01);
现在,控件将根据与其绑定的属性中的值设置所选值。
希望它有所帮助!
答案 1 :(得分:0)
我一直在努力解决这个问题,简单的答案是我无法在模型中没有关系的模型上分配选定的值。
唯一的方法是我需要更新我的模型,或创建另一个表示我的数据的模型(CMIIW)。
但是我发现了一个简单的黑客,它不需要改变模型,仍然不完美,但它对我来说很好。
这是我更新的控制器:
public async Task<ActionResult> Edit(Guid? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var slik_data_a01 = await db.slik_data_a01.FindAsync(id);
if (slik_data_a01 == null)
{
return HttpNotFound();
}
//init Dropdown Data
ViewBag.jenissegmen = new SelectList((from x in db.master_segmenfasilitas
select new { x.fasilitas, x.sandi }).ToList()
/*OrderByDescending to put the selected value on first row*/
.OrderByDescending(o => o.sandi == slik_data_a01.kode_jenis_segmen)
, "sandi", "fasilitas");
//then return to the view.
return View(slik_data_a01);
}
并且视图仍在使用Html.DropDownListFor