0

私はこれまで StackOverflow について質問したことがなく、したくもありませんでしたが、必死なので、ここに行きます: 保存された値をデフォルト値として表示したり、ドロップダウンに表示したりできません。

コントローラーでリストを設定しました。

public ActionResult Index()
{
    //User Dropdown List
    var users = Roles.GetUsersInRole("Manager");
    SelectList list = new SelectList(users);
    ViewBag.Users = list;

    return View();
}

次に、ビューで管理者はこれらのユーザーのいずれかを選択し、EF を介してデータベースに保存できます。

@Html.DropDownList("Users", ViewBag.Users as SelectList, "--Select Manager--")

これはすべてうまく機能しますが、このエントリを編集するときに、リストの最初の名前ではなく、現在保存されているマネージャーをドロップダウン リストに表示する必要があります。編集アクションで、現在のマネージャーをデータベースから引き出して、デフォルトで選択された項目としてドロップダウンに戻すことができることを期待していましたが、うまくいきませんでした:

public ActionResult Edit(int id = 0)
{
    var theOwner = (from v in _db.Location where v.LocationID == id select v.Owner).FirstOrDefault();

    var users = Roles.GetUsersInRole("Manager");
    SelectList list = new SelectList(users, theOwner);
    ViewBag.Users = list;

過去 2 週間にわたって読んだすべての例から、ドロップダウン内で機能する 3 つの異なる値がすべての人にあり、SelectList メソッドですべてのオーバーロードを使用できるようになりました。ただし、私の問題は、この文字列リストに項目が 1 つしかないため、必要に応じてオーバーロードを利用できないことです。
それで、これをどのように機能させることができるかについて誰かが考えを持っていますか? これについてお時間をいただきありがとうございます。

4

2 に答える 2

1

SelectList を作成する行の 2 番目のパラメーターを変更すると、うまくいくはずです。

ここに問題があると思います。現在、2 番目のパラメーターを「theOwner」として指定しています。これは、以前の Linq ステートメントからのオブジェクト参照です。ただし、SelectList には一連の文字列 (指定されたロール名に一致するユーザーのユーザー名) が含まれています。その結果、SelectList は、SelectedItem として指定したものを、それに含まれる文字列のリスト内の何かと一致させる方法を「認識」していません。

しかし、その 2 番目のパラメーターを改良して、検索した所有者の USERNAME を指定すると、機能するはずです。ただし、 Location テーブルの正しいプロパティ名が何であるかはわかりません。現在選択しているフィールド ( v.Owner) に Key ではなく UserName 自体が含まれている場合、構文は次のようになります。

SelectList list = new SelectList(users, theOwner.Owner);

その列に int や Guid などのユーザーのキーが実際に含まれている場合、そのキーを使用して UserName のクエリを実行できますが、修正の性質は同じです。

それが役立つことを願っています。

于 2012-12-22T17:58:46.237 に答える