87

Stack Overflowにはこれに関する投稿がいくつかありますが、私の現在の状況で問題を解決しているように見える答えはありません。

テーブルを含むページがあり、各行にはいくつかのテキストフィールドとドロップダウンがあります。すべてのドロップダウンで同じSelectListデータを使用する必要があるため、次のように設定しました。

コントローラ

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

意見

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

私は多くの場所でこの設定を正確に使用しましたが、この特定のビューで何らかの理由でエラーが発生します:

キー「submarket_0」を持つタイプ「IEnumerable」のViewDataアイテムはありません。

4

10 に答える 10

80

わかりましたので、答えはこの問題に関する他の投稿から得られたもので、次のとおりです。

たとえば「submarket_0」と同じ名前のViewDataが含まれている場合、この場合はソース SelectList である2 番目のパラメーターを指定しないと、Html ヘルパーは自動的にそのデータを入力します。SelectListDropDownListDropDownList

私のエラーで何が起こったのですか:

ドロップダウン リストを含むテーブルが部分ビューにあり、変更されており、参照していたものがViewData含まれなくなったため、 (エラーをスローする代わりに) ViewData で「submarket_0」と呼ばれる SelectList を見つけようとしました (GRRRR! !!) まだ見つからず、エラーが発生しました :)SelectListHtmlHelper

間違っていたら訂正してください

于 2010-05-17T14:08:18.353 に答える
30

古い質問ですが、ここに問題の別の説明があります。厳密に型指定されたビューがあり、ViewData を使用してドロップダウン リストを作成していない場合でも、このエラーが発生します。MVC ソースを見ると、エラーの理由が明らかになります。

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

したがって、次のようなものがある場合:

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

AndModel.DropDownDataが null の場合、MVC は ViewData をMyList調べて名前を付け、ViewData にその名前のオブジェクトがない場合はエラーをスローします。

于 2013-10-11T20:10:14.870 に答える
15

同じエラーが発生しました。問題は、誤ったキー名を指定しているため、エラー テキストが紛らわしいことだと思います。

あなたの場合、「キー「サブマーケット」を持つタイプ「IEnumerable」のViewDataアイテムはありません」と言う必要があります。

私のエラーは、ビュー コード (「サブマーケット」) のスペルミスでしたが、エラー テキストに夢中になりました。

この回答を投稿するのは、私がそうであったように、このエラーを探している人々に、問題はIENumerable が見つからないことであると言いたいからです。エラー ("submarket_0") で示されたものにはありません

受け入れられた答えは非常に興味深いですが、あなたが言ったように、2番目のパラメーターを指定しないと規則が適用されます。変数名のつづりを間違えました)

お役に立てれば!

于 2011-10-28T07:38:59.903 に答える
9

問題は、送信ボタンのクリック時にポストバックが発生するためです。したがって、送信時にデータを投稿しているときに、View() を返す前に書き込みをもう一度クリックします。

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");
于 2011-09-05T07:29:08.220 に答える
3

名前空間を確認します。

System.Web.Mvc.SelectListItemの代わりに、コントローラーでSystem.Web.Webpages.Html.SelectListItemを割り当てることができます。

于 2013-05-22T09:28:33.523 に答える
-1

私の場合、 namespaces に競合がありました。

using System.Web.Mvc;

using System.Collections.Generic;

明示的に Mvc を使用したいので、次のように宣言しました。

new System.Web.Mvc.SelectList(...)
于 2015-03-10T15:55:59.127 に答える