首页 >后端开发 >C++ >为什么我的ASP.NET MVC表单提交抛出' ViewData项目类型不匹配:期望'iEnumerable'但接收到'System.int32''错误?

为什么我的ASP.NET MVC表单提交抛出' ViewData项目类型不匹配:期望'iEnumerable'但接收到'System.int32''错误?

Patricia Arquette
Patricia Arquette原创
2025-02-03 03:01:09211浏览

Why Does My ASP.NET MVC Form Submission Throw a

asp.net MVC表单提交错误:ViewData类型不匹配

>

提交ASP.NET MVC表单时,您可能会遇到“具有键'categoryId”的viewData项为'system.int32',但必须是类型的'iEnumerable'。”通常,当您的控制器操作期望下拉列表的对象集合,但会收到一个整数时,这通常会发生。 SelectListItem

根本原因:

> 差异源于视图模型和控制器动作期望之间的不匹配:

您的视图模型的
    属性是
  • CategoryIDint您视图中的下拉列表需要
  • 填充其选项。
  • 控制器的获取方法正确填充了下拉列表,但是帖子方法无法重新填充它。IEnumerable<SelectListItem>
  • >在邮政方法中导致null
  • ,导致错误。 该框架试图在预期的
>中使用

>值,从而导致类型不匹配。CategoryList> intViewData解决方案:IEnumerable

该解决方案涉及在控制器的后行动中重新流传属性。这样可以确保下拉列表数据即使在表单提交后也可用。>

CategoryList理解机制:

<code class="language-csharp">public ActionResult Create(ProjectVM model)
{
    if (!ModelState.IsValid)
    {
        // Repopulate the CategoryList
        model.CategoryList = new SelectList(db.Categories, "ID", "Name"); 
        return View(model);
    }
    // ... save the model and redirect ...
}</code>

助手方法使用属性名称从字典中检索选择列表。 如果列表为null,它将检查具有相同名称的A条目。 查找

,其中预计会触发错误。

> DropDownListFor此错误强调了在您的视图模型,视图和控制器操作之间为无缝表单提交的一致数据键入的重要性。 仔细注意数据类型管理会阻止这些常见的MVC陷阱。ViewData

以上是为什么我的ASP.NET MVC表单提交抛出' ViewData项目类型不匹配:期望'iEnumerable'但接收到'System.int32''错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn