web-dev-qa-db-de.com

Html.DropDownList Ausgewählter Wert funktioniert nicht (Verwendung von Konstruktor mit IEnumberable <SelectListItem>)

Ich habe ein Problem, bei dem der ausgewählte Wert für die Html.DropDownList-Helper-Methode nicht funktioniert. Siehe unten:

Das ist mein Controller:

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

    return View(item);
}

Dies ist meine Ansicht:

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

Wenn ich jedoch die unten gezeigte Ansicht durchsehe, funktioniert es:

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

Das Folgende funktioniert auch, aber da der Feldname nicht mit dem Modell übereinstimmt, wird er nicht korrekt gepostet.

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

Der Grund, warum ich die erste Option verwenden muss, ist, dass ich das Klassenattribut zum Steuerelement hinzufügen kann.

Kann mir jemand helfen zu verstehen, was ich falsch mache?

17
Paul Peat

Sie haben hier das gleiche Problem:

DropDownListFor Wert nicht auswählen

Das Problem liegt in Ihrem ViewBag-Eigenschaftsnamen. Da es mit Ihrer Eigenschaft in Model identisch ist, funktioniert es nicht. Sie sollten nur den Namen Ihrer ViewBag-Requisite in etwas anderes ändern, z.

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

und auf Ansicht

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

Die Tatsache, dass Sie verwenden können, hat mir nicht gefallen

@Html.DropDownList("NewsItemID") 

und es funktioniert. Dann müssen Sie das 'class'-Attribut hinzufügen und plötzlich bricht es ab. Ich habe gesehen, dass ein Ort arbeitet und ein anderer nicht mit der Syntax arbeitet

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

Als ich das recherchierte, stellte ich fest, dass ViewBag.NewsItemId tatsächlich eine Null in der Ansicht war. Eine Arbeitssyntax, bei der die Felder Model und ViewBag den gleichen Namen haben

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

Ich habe viele Sachen ausprobiert, aber irgendwann hat es so funktioniert

Im Controller

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);

Und dann in Sichtweise stelle ich nur (ich habe das Onchange-Ereignis und die Dropdown-Klasse auch hier, aber Sie können diese entfernen, wenn Sie möchten).

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

(Sorry über Finnisch in den Textwerten und Variablennamen, aber das sollte keine Rolle spielen: D)

2
Juho Honkala

Zuallererst, wie bevölkern Sie ViewBag.NewsItemId.Items? Wir sehen nicht, woher die Werte kommen. 

Damit ein ausgewählter Wert funktioniert, muss er vom gleichen Typ sein wie die Elemente Ihrer Sammlungen. Wenn item.NewsItemId vom Typ T ist, muss ViewBag.NewsItemId.Items vom Typ IEnumerable<T> sein (oder von einem anderen Erfassungstyp, der ihn implementiert). Dies scheint nicht der Fall zu sein, da Sie NewsItemId als ausgewählten Wert festlegen, während Ihre Sammlung auf NewsItemId.Items basiert, der möglicherweise nicht vom selben Typ ist.

1
Réda Mattar

Ändern Sie den Namen der Viewbag-Eigenschaft in einen anderen als den auf der Seite verwendeten Namen der Modellvariablen.

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

ändern 

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

ViewBag.NewsItemIdList name geändert. auch im Controller ändern.

0
Seliya Hilal

Ich hatte das gleiche problem Im folgenden Beispiel hat die Variable ViewData ["DATA_ACREDITO_MODELO_INTEGRADO"] eine SelectListItem-Liste mit einem standardmäßig ausgewählten Wert, aber ein solches Attribut wird nicht visuell wiedergegeben.

// 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;

Ich habe es gelöst, indem ich das erste Argument von DropdownList anders als das Attribut id gemacht habe.

// 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"
...

Sie sollten den Namen des Feldes Ihrer DropDownList ändern:

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