在asp.net mvc中如何将对象列表从视图传递到控制器
首先,我在[HttpGet]操作中创建模型列表并返回视图在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> @型号列表 تنظیمات @使
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>
}