6

さまざまな行を持つテーブルがあり、各行は ID に対応しています。すべての行に EDIT オプションがあります。これを選択すると、ユーザーは「Edit.chtml」フィールドでその ID に対応するデフォルト値を確認できるようになり、デフォルト値を消去して新しいエントリを入力して更新することができます。それを保存します。

Edit.chtml」には、「MANAGERS」のフィールドがあり、テーブルから編集操作が選択された行の 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>
4

2 に答える 2

2

@Html.DropDownList("dp.MANAGER", ViewBag.managers)すでに SelectList のタイプになっているため、selectlist なしで記述しました。

そしてViewBag.managers = new SelectList(list_managers, "ID", "NAME");、このように書きます

于 2013-06-11T02:57:34.730 に答える
2

次のように、コントローラー内で選択した 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)
于 2013-06-10T15:11:21.363 に答える