ホームページ >バックエンド開発 >C++ >なぜ私のドロップダウンリストは、キー「xxx」を搭載した「viewdataアイテム」がタイプ 'system.int32'であるのに、「ienumerable」というタイプでなければならないのですか?

なぜ私のドロップダウンリストは、キー「xxx」を搭載した「viewdataアイテム」がタイプ 'system.int32'であるのに、「ienumerable」というタイプでなければならないのですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-02-03 03:11:10258ブラウズ

Why Does My DropDownListFor Throw

ASP.NET MVC DropDownListForエラー:タイプMISMATCH

を使用するときに遭遇した共通点について説明します。 InvalidOperationExceptionDropDownListFor問題:"The ViewData item that has the key 'XXX' is of type 'System.Int32' but must be of type 'IEnumerable'."

このエラーは、モデルのプロパティ(例えば、

)にバインドされているときに発生します。 ヘルパーは、選択したアイテムを表す単一の整数値ではなく、選択可能なアイテムのコレクションを期待しています。

原因:

XXX DropDownListForフォームの提出が単一の整数値(選択したID)を提供するために不一致が発生しますが、ヘルパーはドロップダウンオプションを埋めるためにコレクションを必要とします。 intIEnumerable<SelectListItem>例のシナリオ:DropDownListFor

カテゴリIDのプロパティを備えたモデルがあるとしましょう。 および

を使用したビュー

フォームの提出時に、には選択した整数IDのみが含まれ、エラーが発生します。

解決策:

int

ソリューションには、選択可能なアイテムのコレクションを保持するプロパティを含めるようにモデルを変更することが含まれます。
<code class="language-csharp">public class ProjectVM
{
    public int CategoryID { get; set; }
}</code>

次に、コントローラーにこのDropDownListForプロパティを入力します:

<code class="language-html">@Html.DropDownListFor(model => model.CategoryID, new SelectList(ViewBag.Categories, "ID", "Name"))</code>

あなたのビューは次のことを使用します:CategoryID

重要な考慮事項:

<code class="language-csharp">public class ProjectVM
{
    public int CategoryID { get; set; }
    public IEnumerable<SelectListItem> CategoryList { get; set; }
}</code>
ポストでの再射撃:

非常に重要なことに、CategoryListアクションメソッドで

を再現します。 検証が失敗した場合、
<code class="language-csharp">public class HomeController : Controller
{
    public ActionResult Create()
    {
        var model = new ProjectVM();
        model.CategoryList = new SelectList(db.Categories, "ID", "Name"); // Assuming db is your database context
        return View(model);
    }

    [HttpPost]
    public ActionResult Create(ProjectVM model)
    {
        if (ModelState.IsValid)
        {
            // Save model to database
        }
        // Repopulate the CategoryList in case of validation errors
        model.CategoryList = new SelectList(db.Categories, "ID", "Name");
        return View(model);
    }
}</code>
は自動的に再定数されないため、後続のレンダリングでエラーが発生します。

データソース:
<code class="language-html">@Html.DropDownListFor(model => model.CategoryID, Model.CategoryList)</code>

カテゴリの実際のデータソースに置き換えます。 およびプロパティがデータベーススキーマと一致することを確認してください。

    強力なタイピング:
  • の使用は、一般的なタイピングとより良いコードの明確さを一般的なものと比較して望まれます。 これらの変更を実装することにより、CategoryListヘルパーに必要なアイテムのコレクションを提供し、タイプの不一致エラーを解決します。

以上がなぜ私のドロップダウンリストは、キー「xxx」を搭載した「viewdataアイテム」がタイプ 'system.int32'であるのに、「ienumerable」というタイプでなければならないのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。