【问题标题】:Html.dropdownlist does not display the default/selected value in the dropdown fieldHtml.dropdownlist 不在下拉字段中显示默认/选定值
【发布时间】:2013-06-10 14:45:48
【问题描述】:

我有一个包含不同行的表,每一行对应一个 ID。 For every row, I have EDIT option which when selected should enable the user to look at the default values corresponding to that ID in the 'Edit.chtml' fields and there by update it by erasing the default values并输入新条目并保存。

在“Edit.chtml”中,我有一个“经理”字段,我需要使用名称下拉列表填充该字段,其中显示的默认/选定值对应于编辑所在行的 ID从表中选择操作。 我正在使用 viewBag,但我的问题是下拉列表始终显示列表中的第一项,而不是选定的值。请参阅下面的代码。

Controller:
 //
        // GET: /ManagersNAMES/Edit/5

        public ActionResult Edit(int id)
        {
            using (var db = new InpEntities())
            {
                var list_managers = (from x in db.TABLE_MANAGERS
                                        select new TABLE_MANAGERSDTO
                                        {
                                            ID = x.ID,
                                            NAME = x.NAME,
                                        }).OrderBy(w => w.NAME).ToList();

                ViewBag.managers = new SelectList(list_managers, "ID", "NAME", id);

                return View();
            }
        }

        public class TABLE_MANAGERSDTO
        {
            public string NAME { get; set; }
            public int ID { get; set; }
        }

        //
        // POST: /ManagersNAMES/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, TABLE_INSTITUTES dp)
        {
            try
            {

                using (var db = new InpEntities())
                {

                    TABLE_INSTITUTES tmp = (TABLE_INSTITUTES)db.TABLE_INSTITUTES.Where(f => f.ID == id).First();
                    tmp.MANAGER = dp.MANAGER;
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            catch
            {
                return View();
            }
        }

查看:'Edit.chtml'

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>

    <div class="editor-label" style="font-weight:bold">MANAGER</div>
    <div class="editor-field">
        @Html.DropDownList("dp.MANAGER", (SelectList)ViewBag.managers)
    </div>

    <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


    【解决方案1】:

    您需要像这样在控制器中设置选定的 id:

    var list_managers =  list_managers.Select(x => new
                              {
                                  Value = x.ID.ToString(),
                                  Text = x.Name
                              })
                              .ToList();
    
    ViewBag.managers = new SelectList(list_managers, "ID", "NAME", id);
    

    并将您的视图更改为:

    @Html.DropDownList("dpMANAGER", (SelectList)ViewBag.managers)
    

    【讨论】:

    • 感谢您的帮助。它抱怨 Value = x.ID “无法将 int 隐式转换为字符串”我试图转换它但不起作用
    • 对不起,我没有测试它,因为我没有完整的代码。请尝试上面的 toString()。
    • 谢谢,我试过了。这似乎没问题。但是,我有这个问题 - “无法将类型 'System.Collections.Generic.List' 转换为 'System.Web.Mvc.SelectList'”
    • 请尝试上述方法,我相信我们最终会到达那里。 :D
    • :) 我很抱歉地说我收到了这个错误 - 'System.Web.Mvc.HtmlHelper' 不包含'DropDownList' 的定义和最佳扩展方法重载'System .Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper, string, string)' 有一些无效参数
    【解决方案2】:

    刚刚写了@Html.DropDownList("dp.MANAGER", ViewBag.managers) 没有选择列表,因为它已经在选择列表类型中。

    然后像这样写ViewBag.managers = new SelectList(list_managers, "ID", "NAME");

    【讨论】:

    • 感谢帖木儿的回复!我不得不在下拉列表中使用 SelectList,因为它会引发错误
    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    相关资源
    最近更新 更多