' mit dem Schlüssel 'xxx''/> ' mit dem Schlüssel 'xxx''/> ' mit dem Schlüssel 'xxx''/> Es gibt kein ViewData-Element vom Typ 'IEnumerable <SelectListItem>' mit dem Schlüssel 'xxx' | germanylandofinnovation.com

Frage Es gibt kein ViewData-Element vom Typ 'IEnumerable ' mit dem Schlüssel 'xxx'


Es gibt ein paar Beiträge dazu auf Stack Overflow, aber keine mit einer Antwort, die das Problem in meiner aktuellen Situation zu beheben scheint.

Ich habe eine Seite mit einer Tabelle darin, jede Zeile hat eine Anzahl von Textfeldern und ein Dropdown. Alle Dropdown-Listen müssen dieselben SelectList-Daten verwenden, damit ich sie wie folgt einrichten kann:

Regler

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");

Aussicht 

<%= Html.DropDownList("submarket_0", (SelectList)ViewData["Submarkets"], "(none)") %>

Ich habe genau dieses Setup an vielen Stellen verwendet, aber aus irgendeinem Grund in dieser bestimmten Ansicht bekomme ich den Fehler:

Es gibt kein ViewData-Element vom Typ 'IEnumerable' mit dem Schlüssel 'submarket_0'.


75
2018-05-17 13:22


Ursprung


Antworten:


Ok, also wurde die Antwort von einigen anderen Posts über dieses Problem abgeleitet und es ist:

Wenn dein ViewData enthält ein SelectList mit dem gleichen Namen wie dein DropDownList d. h. "submarket_0", füllt der HTML-Helfer automatisch Ihre DropDownList mit diesen Daten wenn Sie den 2. Parameter nicht angeben was in diesem Fall die Quelle SelectList ist.

Was mit meinem Fehler passiert ist:

Weil die Tabelle mit den Dropdown - Listen in einer Teilansicht war und die ViewData war geändert worden und nicht mehr enthalten SelectList Ich hatte referenziert, die HtmlHelper (anstatt einen Fehler zu werfen) habe versucht, die SelectList namens "submarket_0" in den ViewData (GRRRR !!!) zu finden, die STILL nicht finden konnte, und dann einen Fehler auf die Seite geworfen :)

Bitte korrigiere mich wenn ich falsch liege


67
2018-05-17 14:08



Alte Frage, aber hier ist eine andere Erklärung des Problems. Sie erhalten diesen Fehler auch dann, wenn Sie stark typisierte Ansichten eingegeben haben und ViewData nicht zum Erstellen Ihrer Dropdown-Liste verwenden. Der Grund für den Fehler kann deutlich werden, wenn Sie auf die MVC-Quelle:

// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
    selectList = htmlHelper.GetSelectData(name);
    usedViewData = true;
}

Also wenn du etwas hast wie:

@Html.DropDownList("MyList", Model.DropDownData, "")

Und Model.DropDownData ist null, MVC durchsucht Ihre ViewData nach etwas benanntem MyList und gibt einen Fehler aus, wenn in ViewData kein Objekt mit diesem Namen vorhanden ist.


22
2017-10-11 20:10



Ich hatte denselben Fehler, ich denke, das Problem ist das Der Fehlertext ist verwirrend, weil es einen falschen Schlüsselnamen gibt.

In Ihrem Fall sollte es sagen: "Es gibt kein ViewData-Element vom Typ 'IEnumerable', das den Schlüssel 'Submarkets'" hat.

Mein Fehler war ein Schreibfehler im View-Code (Ihre "Submarkets"), aber der Fehlertext hat mich verrückt gemacht.

Ich poste diese Antwort, weil ich Leute sagen möchte, die nach diesem Fehler suchen, wie ich war, dass das Problem das ist es ist nicht das IENumerable, aber in der var, die es suchen sollte ("Submarkets" in diesem Fall), nicht in der einen Fehler angezeigt ("submarket_0").

Akzeptierte Antwort ist sehr interessant, aber wie Sie sagten, wird die Konvention angewendet, wenn Sie den 2. Parameter nicht angeben, in diesem Fall wurde es angegeben, aber die Var wurde nicht gefunden (in Ihrem Fall, weil die Viewdata nicht hatte, in meinem Fall weil Ich habe den Var-Namen falsch geschrieben)

Hoffe das hilft!


14
2017-10-28 07:38



Das Problem liegt darin, dass ein Post-Back-Vorgang beim Klicken auf die Schaltfläche "Absenden" erfolgt. Klicken Sie also beim Posten von Daten auf Senden nochmal schreiben bevor man View () zurückgibt

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");

8
2017-09-05 07:29



Überprüfen Sie den Namespace.

Sie könnten zuweisen System.Web.Webseiten.Html.SelectListItem im Controller statt System.Web.Mvc.SelectListItem.


3
2018-05-22 09:28



Das ist auch in Ordnung; Beispielsweise:
==> In der "NumberController" Datei:

public ActionResult Create([Bind(Include = "NumberId,Number1,Number2,OperatorId")] Number number)
{
    if (ModelState.IsValid)
    {
        ...
        ...
        return RedirectToAction("Index");
    }
    ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId", 
                                "OperatorSign", number.OperatorId);                
    return View();
}

==> In Datei anzeigen (Create.cshtml):

<div class="form-group">
    @Html.LabelFor(model => model.Number1, htmlAttributes: new { @class = 
                   "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Number1, new { htmlAttributes = new { 
                        @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Number1, "", new { @class = 
                                   "text-danger" })
    </div>
</div>

Jetzt, wenn wir diese Aussage entfernen:

ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId", "OperatorSign", number.OperatorId);

von der Rückseite der folgenden Aussage (in unserem Controller):

return View();

wir werden diesen Fehler sehen:

Es gibt kein ViewData-Element vom Typ 'IEnumerable' mit dem Schlüssel 'OperatorId'.

* Seien Sie also sicher, dass diese Aussagen existieren. *


0
2017-10-08 12:46



Das Problem, das diesen Fehler verursacht hat, trat bei mir auf, als ich eine neue Zeile in der Datenbank speicherte, aber ein Feld war null. Im Entwurf der Datenbanktabelle ist dieses Feld NICHT NULL. Als ich versuchte, eine neue Zeile mit einem Nullwert für ein Nicht-Null-Feld zu speichern, gab Visual Studio diesen Fehler aus. So stellte ich sicher, dass dem Feld ein Wert zugewiesen wurde, und das Problem wurde behoben.


0
2018-02-13 19:20