web-dev-qa-db-ja.com

Html.DropDownListの選択された値が機能しない(IEnumerable <SelectListItem>でコンストラクタを使用)

選択した値がHtml.DropDownListヘルパーメソッドで機能しないという問題があります。下記参照:

これは私のコントローラーです:

public ActionResult Edit(int id = 0)
{
    NewsEvent item = GetItem(id);
    ViewBag.NewsItemId = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId);

    return View(item);
}

これは私の見解です:

@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
                           new { @class = "form-control" })

ただし、ビューで以下を試してみると動作します:

@Html.DropDownList("NewsItemId", string.Empty)

以下も機能しますが、フィールド名がモデルと一致しないため、正しく投稿されません。

@Html.DropDownList("NewsItemIdDrop",ViewBag.NewsItemId as SelectList, string.Empty,
                           new { @class = "form-control" })

最初のオプションを使用する必要があるのは、コントロールにクラス属性を追加できるようにするためです。

誰かが私が間違っていることを理解するのを手伝ってくれますか?

17
Paul Peat

ここにも同じ問題があります:

DropDownListFor値を選択しない

問題はViewBagプロパティ名にあります。 Modelのプロパティと同じであるため、機能しません。 ViewBagプロップの名前を次のように変更する必要があります。

ViewBag.NewsItemList = new SelectList(ViewBag.NewsItemId.Items, "Id", "Name", item.NewsItemId);

と表示中

@Html.DropDownList("NewsItemId",ViewBag.NewsItemList as SelectList, string.Empty,
                           new { @class = "form-control" })
46
freshbm

たくさん試してみましたが、最終的にはこのように動作しました

コントローラー内

int valittu_tila = 1;
var tapahtumantilat = new List<SelectListItem>();

tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa kirjataan", Value = "0" });
tapahtumantilat.Add(new SelectListItem { Text = "Odottaa jonossa", Value = "1"});
tapahtumantilat.Add(new SelectListItem { Text = "Tapahtumaa käsitellään", Value = "2"});

ViewBag.tilalista = new SelectList(tapahtumantilat, "Value", "Text", valittu_tila);

そして、ビューに配置しました(ドロップダウンのonchangeイベントとクラスもここにありますが、必要に応じて削除できます)。

@Html.DropDownList("tuki_tila", ViewBag.tilalista as SelectList, "-- valitse tila --", new { @onchange = "executeticketsearch();", @class = "haku_dropdowns" })

(テキスト値と変数名のフィンランド語については申し訳ありませんが、それらは重要ではありません:D)

3
Juho Honkala

私はあなたが使用できるという事実が好きではありませんでした

@Html.DropDownList("NewsItemID") 

そしてそれは動作します。次に、「class」属性を追加する必要がありますが、突然壊れます。 1つの場所が機能し、別の場所が構文を使用して機能していないのを見ました

@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
                       new { @class = "form-control" })

これを調査したとき、ViewBag.NewsItemIdは実際にはビュー内でヌルであると判断しました。そのため、同じ名前のModelフィールドとViewBagフィールドを持つ機能する構文は

@Html.DropDownList("NewsItemId", null, string.Empty,
                       new { @class = "form-control" })
2
Tracy P

まず、どのようにViewBag.NewsItemId.Itemsを設定しますか?値がどこから来るのかはわかりません。

選択した値を機能させるには、コレクションの要素と同じ型である必要があります。 item.NewsItemIdT型である場合、ViewBag.NewsItemId.ItemsIEnumerable<T>型(またはそれを実装する他のコレクション型)でなければなりません。 NewsItemIdを選択した値として設定し、コレクションが同じタイプではないNewsItemId.Itemsに基づいているため、そうではないようです。

1
Réda Mattar

ビューバッグプロパティ名を、ページで使用されているモデル変数名以外に変更します。

0
Seliya Hilal
@Html.DropDownList("NewsItemId",ViewBag.NewsItemId as SelectList, string.Empty,
    new { @class = "form-control" })

への変更

@Html.DropDownList("NewsItemId", ViewBag.NewsItemIdList as SelectList, string.Empty, 
    new { @class = "form-control" })

ViewBag.NewsItemIdList名前が変更されました。コントローラーも変更します。

0
Seliya Hilal

同じ問題がありました。以下の例では、変数ViewData ["DATA_ACREDITO_MODELO_INTEGRADO"]にはデフォルトで選択された値を持つSelectListItemリストがありますが、そのような属性は視覚的には反映されません。

// data 
        var p_estadoAcreditacion = "NO";
        var estadoAcreditacion = new List<SelectListItem>();
        estadoAcreditacion.Add(new SelectListItem { Text = "(SELECCIONE)"    , Value = " "    });
        estadoAcreditacion.Add(new SelectListItem { Text = "SI"              , Value = "SI"   });
        estadoAcreditacion.Add(new SelectListItem { Text = "NO"              , Value = "NO"   });

        if (!string.IsNullOrEmpty(p_estadoAcreditacion))
        {
            estadoAcreditacion.First(x => x.Value == p_estadoAcreditacion.Trim()).Selected = true;
        }
         ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] = estadoAcreditacion;

DropdownListの最初の引数をid属性とは異なるものにすることで解決しました。

// error:
@Html.DropDownList("SELECT__ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id         = "SELECT__ACREDITO_MODELO_INTEGRADO"
...
// solved :
@Html.DropDownList("DROPDOWNLIST_ACREDITO_MODELO_INTEGRADO"
, ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem>
, new
{
id         = "SELECT__ACREDITO_MODELO_INTEGRADO"
...

DropDownListのフィールドの名前を変更する必要があります。

@Html.DropDownList("Some_Name_that_does_not_exist_in_model", ViewBag.NewsItemId as SelectList, string.Empty, new { @class = "form-control" })
0
user241841