Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在asp.net mvc中如何将对象列表从视图传递到控制器_Asp.net_Asp.net Mvc_Entity Framework_Razor Pages - Fatal编程技术网

在asp.net mvc中如何将对象列表从视图传递到控制器

在asp.net mvc中如何将对象列表从视图传递到控制器,asp.net,asp.net-mvc,entity-framework,razor-pages,Asp.net,Asp.net Mvc,Entity Framework,Razor Pages,首先,我在[HttpGet]操作中创建模型列表并返回视图 public ActionResult Setting() { var model = db.Settings.ToList(); return View(model); } 他们在视图中获取列表并显示良好。 但在编辑设置值后,我想将对象列表从视图传递到控制器,但这不起作用 @model List<TajerWebsite.Models.Setting> @型号列表 تنظیمات @使

首先,我在[HttpGet]操作中创建模型列表并返回视图

public ActionResult Setting()
{
        var model = db.Settings.ToList();
        return View(model);
}
他们在视图中获取列表并显示良好。 但在编辑设置值后,我想将对象列表从视图传递到控制器,但这不起作用

@model List<TajerWebsite.Models.Setting>
@型号列表

تنظیمات
@使用(Html.BeginForm(“设置”,“管理”,新的{FormMethod.Post}))
{
@Html.AntiForgeryToken()
foreach(模型中的var项目)
{
@Html.HiddenFor(model=>item.Id)
@项目名称
@EditorFor(model=>item.Value,new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(model=>item.Value,“,new{@class=“text danger”})
}
ذخیره
}
行动是:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Setting(IEnumerable<Models.Setting> settings)
    {
        db.Entry(settings);
        db.SaveChanges();
        return View(settings);
    }
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果设置(IEnumerable设置)
{
数据库输入(设置);
db.SaveChanges();
返回视图(设置);
}

但是设置是空的

不能在视图中使用
@foreach
循环将对象列表传递回控制器,因为这样会生成具有相同ID和名称的输入元素

相反,请使用标准for循环:

for(int i = 0; i < Model.Count; i++)
{
    <div class="card-body">
        <div class="form-group">
            @Html.HiddenFor(m => m[i].Id)
            <label for="exampleInputPassword1">@Model[i].Name</label>
            @Html.EditorFor(m => m[i].Value, 
                new { htmlAttributes = new { @class = "form-control"} })
            @Html.ValidationMessageFor(m => m[i].Value, 
                new { @class = "text-danger" })
        </div>
    </div>
}
for(int i=0;im[i].Id)
@型号[i].名称
@EditorFor(m=>m[i].Value,
new{htmlAttributes=new{@class=“form control”})
@Html.ValidationMessageFor(m=>m[i].Value,
新建{@class=“text danger”})
}

谢谢!但是@Model[i].Name或@Html.DisplayFor(m=>m[i].Name)不发送值!您没有将名称放在输入中(目前已将其放在标签中),因此我认为您不需要将其返回到服务器。如果您还想保留名称,只需将其放在隐藏输入中即可。请记住,为了将数据发回服务器,它们需要在输入中!
for(int i = 0; i < Model.Count; i++)
{
    <div class="card-body">
        <div class="form-group">
            @Html.HiddenFor(m => m[i].Id)
            <label for="exampleInputPassword1">@Model[i].Name</label>
            @Html.EditorFor(m => m[i].Value, 
                new { htmlAttributes = new { @class = "form-control"} })
            @Html.ValidationMessageFor(m => m[i].Value, 
                new { @class = "text-danger" })
        </div>
    </div>
}