ASP.NET MVC5:要更新收集几个项目与模型绑定 [英] ASP.NET MVC5: Want to update several items in Collection with model binding

查看:113
本文介绍了ASP.NET MVC5:要更新收集几个项目与模型绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我(在同一时间编辑很多用户)用户对象,这应该是大众编辑的集合。我节省用户输入使用实体框架的数据库。

该系列控制器方法从表单中得到的是空。为什么?
此外,是BindAttribute可能的集合使用像在我的code?

查看:

  @model IEnumerable的< D​​omain.User>
@using(Html.BeginForm(UpdateUsers,用户))
{
    @ Html.AntiForgeryToken()
    @ Html.ValidationSummary(真)
    的foreach(在型号VAR项)
    {
        @ Html.HiddenFor(modelItem => item.Id)
        @ Html.EditorFor(modelItem => item.FirstName)
        @ Html.ValidationMessageFor(型号=> item.FirstName)
        @ Html.EditorFor(modelItem => item.LastName)
        @ Html.ValidationMessageFor(型号=> item.LastName)
        @ Html.EditorFor(modelItem => item.Birth)
        @ Html.ValidationMessageFor(型号=> item.Birth)
    }    <输入类型=提交值=更新的用户数据/>
}

控制器:

  [HttpPost]
[ValidateAntiForgeryToken]
公众的ActionResult UpdateUsers([绑定(包括=身份证,名字,姓氏,诞生)的IEnumerable<使用者>用户)
{
    如果(ModelState.IsValid)
    {
        的foreach(在用户用户u)
        {
            db.Entry(U).STATE = EntityState.Modified;
        }
        db.SaveChanges();
    }    返回RedirectToAction(EditUsers);
}


解决方案

您需要索引你的集合与而非的foreach 为了使ModelBinder的把它捡起来:

 为(VAR I = 0; I< Model.Count();我++)
    {
        @ Html.HiddenFor(modelItem => modelItem [I] .ID)
        @ Html.EditorFor(modelItem => modelItem [I] .FirstName)
        @ Html.ValidationMessageFor(modelItem => modelItem [I] .FirstName)
        @ Html.EditorFor(modelItem => modelItem [I] .LastName)
        @ Html.ValidationMessageFor(modelItem => modelItem [I] .LastName)
        @ Html.EditorFor(modelItem => modelItem [I] .Birth)
        @ Html.ValidationMessageFor(modelItem => modelItem [I] .Birth)
    }

So I have a Collection of User objects, which should be mass-editable (edit many users at the same time). I'm saving the user input to the database using Entity Framework.

The collection the controller method gets from the form is null. Why? Also, is the BindAttribute possible to use with collections like in my code?

View:

@model IEnumerable<Domain.User>
@using (Html.BeginForm("UpdateUsers", "Users"))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    foreach (var item in Model)
    {
        @Html.HiddenFor(modelItem => item.Id)
        @Html.EditorFor(modelItem => item.FirstName)
        @Html.ValidationMessageFor(model => item.FirstName)
        @Html.EditorFor(modelItem => item.LastName)
        @Html.ValidationMessageFor(model => item.LastName)
        @Html.EditorFor(modelItem => item.Birth)
        @Html.ValidationMessageFor(model => item.Birth)
    }

    <input type="submit" value="Update user data"/>
}

Controller:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UpdateUsers([Bind(Include = "Id,FirstName,LastName,Birth")] IEnumerable<User> users)
{
    if (ModelState.IsValid)
    {
        foreach (User u in users)
        {
            db.Entry(u).State = EntityState.Modified;
        }
        db.SaveChanges();
    }

    return RedirectToAction("EditUsers");
}

解决方案

You need to index your collection with a for rather than a foreach in order for the ModelBinder to pick it up:

for (var i = 0 ; i < Model.Count(); i++)
    {
        @Html.HiddenFor(modelItem => modelItem[i].Id)
        @Html.EditorFor(modelItem => modelItem[i].FirstName)
        @Html.ValidationMessageFor(modelItem => modelItem[i].FirstName)
        @Html.EditorFor(modelItem => modelItem[i].LastName)
        @Html.ValidationMessageFor(modelItem => modelItem[i].LastName)
        @Html.EditorFor(modelItem => modelItem[i].Birth)
        @Html.ValidationMessageFor(modelItem => modelItem[i].Birth)
    }

这篇关于ASP.NET MVC5:要更新收集几个项目与模型绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆