传递给 ViewDataDictionary 的模型项是类型,但此 ViewDataDictionary 实例需要类型为“System.Collections”的模型项

The model item passed into the ViewDataDictionary is of type but this ViewDataDictionary instance requires a model item of type 'System.Collections

提问人:Sinan 提问时间:11/15/2022 最后编辑:Sinan 更新时间:11/15/2022 访问量:476

问:

当我想在 Asp.net.Mvc 中发布我的表单时,我遇到了这个问题:我该如何解决这个问题

InvalidOperationException:传递给 ViewDataDictionary 的模型项的类型为“FormValidation.Models.Entity.Personel”,但此 ViewDataDictionary 实例需要类型为“System.Collections.Generic.IEnumerable”1[FormValidation.Models.Entity.Personel]“的模型项。

控制器

[HttpGet]
        public IActionResult Index()
        {
           

           
            return View();
        }


        [HttpPost]
        public IActionResult Post(Personel personel)
        {

            return View(personel);
        }

表单索引

@model FormValidation.Models.Entity.Personel
<form method="post" asp-action="Post" asp-controller="Home">
    <div class="container">
        <div class="row">
            <div class="form-group">
                <label for="Name" class="form-control" placeholder="Enter Your Name">Name</label>
                <input type="text" class="form-control" asp-for="Name" />

            </div>
            <br />
            <div class="form-group">
                <label for="Surname" class="form-control" placeholder="Enter Your Surname">Surname</label>
                <input type="text" class="form-control" placeholder="Enter Your surname" asp-for="Surname" />
            </div>
            <br />
            <br />
            <div class="form-group">
                <label for="City">City select</label>
                <select class="form-control" asp-for="City">
                    <option></option>
                    <option>1</option>
                    <option>2</option>
                    <option>3</option>
                    <option>4</option>
                    <option>5</option>
                </select>
            </div>
            <br />
            <br />
            <br />
            <div class="form-group">
                <label for="Age" class="form-control" placeholder="Enter Your Age">Age</label>
                <input type="number" class="form-control" placeholder="Enter Your Age" asp-for="Age" />

            </div>
            <br />
            <div class="form-group">
                <label for="Adress">Adres</label>
                <textarea class="form-control" rows="3" asp-for="Adress">Adres</textarea>
            </div>
        </div>
    </div>
    <br />

    <input type="submit" name="submit" value="submit" class="btn btn-primary" />
</form>

帖子索引

@model IEnumerable<FormValidation.Models.Entity.Personel>
   

@foreach (var item in Model)
{
    <p>@item.Name</p>
    <p>@item.Surname</p>
    <p>@item.Age</p>
    <p>@item.City</p>
    
}
asp.net asp.net-mvc asp.net-core asp.net-mvc-3

评论


答:

0赞 Ruikai Feng 11/15/2022 #1

正如错误所示,您传递了单个人员模型来呈现视图return View(personel);

但是,视图需要IEnumerable<Personel>

如果你只想显示你刚刚创建的模型的细节,修改你的视图:

@model FormValidation.Models.Entity.Personel
.......
    <p>@Model.Name</p>
    <p>@Model.Surname</p>
    <p>@Model.Age</p>
    <p>@Model.City</p>

评论

0赞 Sinan 11/15/2022
感谢您的回答,它有效,但我想知道为什么 foreach 循环不起作用
0赞 Ruikai Feng 11/15/2022
因为你刚刚将单个人模型传递给了 ViewDataDictionary,如果你想将代码保留在你的视图中,你必须传递 IEnumerable<Personel> 或 List<Personel 的参数类型>例如:var personellist=new List<Personel>(){...... } , return View(personellist)
0赞 Sinan 11/15/2022
谢谢你的回答,你回答了我所有的问题