首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未能为编辑页面上的下拉列表设置现有值

未能为编辑页面上的下拉列表设置现有值
EN

Stack Overflow用户
提问于 2017-03-10 09:54:31
回答 2查看 34关注 0票数 0

首先,我已经从现有的db预定义了模型。我只想用MVC 5在编辑页面上显示现有的价值。

以下是我所做的:

控制器

代码语言:javascript
复制
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);
}

我的观点是:

代码语言:javascript
复制
<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的第一个数据,而不是现有的数据,尽管我已经在控制器上定义了选定的值。

任何帮助都很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-14 03:07:50

我一直在试图解决这个问题,而简单的答案是,我不能在模型中没有关系的模型上分配所选的值。

唯一的方法是我需要更新我的模型,或者创建另一个用表单表示我的数据的模型(CMIIW)。

但我发现了一个简单的黑客,它不需要改变模型,仍然不完美,但它只是对我来说很好。

这是我更新的控制器:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2017-03-10 10:01:00

在最后一行传递对象到视图方法之前,需要在与DropDownListFor助手绑定的模型属性中设置选定的值,并且不需要在SelectList构造函数中设置选定的值,因此将SelectList创建代码更改为:

代码语言:javascript
复制
var jenissegmen = new SelectList((from x in db.master_segmenfasilitas
                                  select new { x.fasilitas, x.sandi }).ToList(), 
                                  "sandi", 
                                  "fasilitas");

在传递模型集之前,在模型属性中选择值之前,助手将注意选择值:

代码语言:javascript
复制
slik_data_a01.kode_jenis_segmen = selectedjs;
ViewBag.jenissegmen = jenissegmen;
return View(slik_data_a01);

现在,控件将根据与其绑定的属性中的值设置所选值。

希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42715338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档