0

MVCのドロップダウンリスト...基本的に私の存在の悩みの種...

この正確な問題について多くのトピックを見てきましたが、ここやインターネットで見つけたすべてが私の問題を解決していません.

最初に少し背景を説明します。ユーザーがレコードを編集できるページがあります。編集ページのこれらのフィールドの 1 つは、クライアントで満たされたドロップダウン リストです。編集ページにアクセスするには、レコードのテーブルが表示された別のページから編集リンクをクリックします。編集ページに到達すると、選択したレコードから編集する情報がフォームに取り込まれます。ログイン画面に加えて、これはおそらく、データを移動するすべての Web サイトにとって最も基本的で一般的な機能の 1 つです。

したがって、ビューのコードは次のとおりです。

@Html.DropDownList("ClientsDropdown", (IEnumerable<SelectListItem>)ViewBag.ClientsDropdown, "Select a Client")

コントローラーのコードは次のとおりです。

[HttpGet]
    public ViewResult Details(int id, int pageNumber = 1)
    {
        Invoice invoice = db.Invoices.Find(id);
        FillClientDropdown(invoice);
        var model = new InvoiceDetailsModel() { Invoice = invoice, PageNumber = pageNumber };
        return View(model);
    }

そして FillClientDropdown(invoice) 呼び出し:

private void FillClientDropdown(Invoice invoice)
    {
        var clientList = db
            .Clients
            .OrderBy(x => x.Name)
            .ToList()
            .Select(x => new SelectListItem
            {
                Selected = (x.ID == invoice.ClientOcrStringID),
                Text = x.Name,
                Value = x.ID.ToString()
            });

        ViewBag.ClientsDropdown = new SelectList(clientList, "Value", "Text", "Selected");
    }

clientList が実際にデータベースから適切なクライアント リストを取得していること、および適切な SelectListItem の「選択済み」属性が True に設定されていることを確認しました。

しかし、ページを読み込んでドロップダウンリストを検査すると、次のようになります。

<select id="ClientsDropdown" name="ClientsDropdown">
<option value="">Select a Client</option>
<option value="1">Test Client 1</option>
<option value="2">Test Client 2</option>

新しい SelectList を作成すると、各オプションに Selected="something" 値も追加されると思いましたが、そうではないようです。

Web フォームを使用できた場合、約 3 分でこれを実行できたことを知るのはかなりイライラするので、この問題に関する助けをいただければ幸いです...

アップデート

うまくいったようです!

これが私がしたことです: 私はすでに InvoiceDetailsModel を使用していたので、追加しました:

public SelectList ClientList { get; set; }

次に、InvoiceController で、詳細を少し変更しました。

[HttpGet]
    public ViewResult Details(int id, int pageNumber = 1)
    {
        Invoice invoice = db.Invoices.Find(id);
        var clientList = db
            .Clients
            .OrderBy(x => x.Name)
            .ToList()
            .Select(x => new SelectListItem
            {
                Text = x.Name,
                Value = x.ID.ToString()
            });
        var model = new InvoiceDetailsModel() { Invoice = invoice, PageNumber = pageNumber };
        model.ClientList = new SelectList(clientList, "Value", "Text", model.Invoice.ClientOcrStringID);
        return View(model);
    }

InvoiceDetailsModel への追加機能を利用するため。最後に、私の見解では、ドロップダウンを次のように変更しました。

@Html.DropDownListFor(model => model.Invoice.ClientOcrStringID, Model.ClientList, "Select a Client")

これが誰かに役立つことを願っています...将来的には誰でも。

4

1 に答える 1