[解決済み] キー 'MY KEY' を持つ ViewData アイテムは 'System.String' 型ですが、'IEnumerable<SelectListItem>' 型である必要があります。
2022-05-12 08:20:56
質問
ASP.NET MVC 2 を使用して、Linq-2-SQL でマッピングされたデータベースからドロップダウンリストにデータを入力しようとしていますが、このエラーが発生します。
型の変数を宣言しているので、私はとても混乱しています。
IEnumerable<SelectListItem>
を宣言しているのですが、エラーが出ているため、そうではないと思われます。とても簡単なことだと思うのですが、苦戦しています。どんな助けでも感謝します。
以下は私のコントローラの興味深い部分です。
public ActionResult Create()
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View();
}
そして、ここからは私の見解の面白いところです。
<div class="editor-label">
<%: Html.LabelFor(model => model.basetype) %>
</div>
<div class="editor-field">
<%: Html.DropDownList("basetype") %>
<%: Html.ValidationMessageFor(model => model.basetype) %>
</div>
フォームを送信する際のPOSTアクションは次のとおりです。
// POST: /Meals/Create
[HttpPost]
public ActionResult Create(Meal meal)
{
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
var db = new DB();
db.Meals.InsertOnSubmit(meal);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
return View(meal);
}
}
else
{
return View(meal);
}
}
ありがとうございます。
どのように解決するのですか?
私も同じ問題を抱えていましたが、ついに答えを得ました。
問題は、フォームを送信した後のPOSTアクションで、ModelStateが有効でない、またはtry/catchでエラーをキャッチしているため、Viewが返されることです。しかし、このときViewには
ViewData["basetype"]
が正しく設定されていません。
もう一度入力する必要があります。おそらく前に使ったのと同じコードで、これを繰り返してください。
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
の前に
return View(meal)
の中に
[HttpPost]
メソッドを使用します。
は、まさにこれで問題が解決します。
[HttpPost]
public ActionResult Create(Meal meal)
{
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
var db = new DB();
db.Meals.InsertOnSubmit(meal);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View(meal);
}
}
else
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View(meal);
}
}
私はこの質問が非常に古いことを知っているが、私は同じ問題で今日ここに来たので、他の人は後でここに来ることができる...
関連
-
[解決済み】同じキーのアイテムがすでに追加されています。
-
[解決済み] HTTPヘッダを送信した後、サーバーがステータスを設定できない IIS7.5
-
[解決済み] ASP.NET MVCアプリケーションで、デバッグ用の起動ページを設定するにはどうすればよいですか?
-
[解決済み] MVC 3 - 辞書に渡されたモデル項目の型は 'System.Collections.Generic.List`1 です。
-
[解決済み] 既存のデータベースの選択されたテーブルからDbContextをScaffoldすることができますか[重複]。
-
[解決済み] ASP.NET MVCにおけるApiControllerとControllerの相違点
-
[解決済み】ASP.NET MVC 3 razor ViewStart ファイルで異なるレイアウトを指定するには?
-
[解決済み】ASP.NET MVC 3 Razor - EditorForにクラスを追加する。
-
[解決済み] datetime2 データ型から datetime データ型への変換で、範囲外の値が発生しました。
-
[解決済み] Entity Frameworkのデータベースを再作成する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] DI向けNinjectとUnityの比較【終了しました
-
[解決済み] Automapper のタイプマップ構成がない、またはサポートされていないマッピング - エラー
-
[解決済み】Html.ActionLinkが"?Length=4 "とレンダリングされるのはなぜか?
-
[解決済み】ASP.NET mvcとIISでURLのドットが原因で404になる
-
[解決済み】MVC 4 Razor ファイルアップロード
-
[解決済み】"JSONリクエストが大きすぎてデシリアライズできませんでした "の表示について
-
[解決済み】MVC 4 @Scripts "does not exist".
-
[解決済み】AutoMapper.CreateMapsをどこに配置するか?
-
[解決済み] ASP.NET MVC: UrlHelperを使用するコントローラのユニットテスト
-
[解決済み] ASP.NET MVCとIIS7で生のHTTPリクエスト/レスポンスをログに記録する