【发布时间】:2017-03-16 07:37:04
【问题描述】:
我有一个这样的模型:
public class TRViewModel
{
public List<TR> TRecord { get; set; }
}
[Table("TRecord")]
public partial class TRecord
{
[Key]
[DisplayName("TID")]
public int Tid { get; set; }
public String Tname { get; set; }
}
控制器是这样的:
public ActionResult Audit(int? id)
{
var tQ = from t in db.TRecordDBSet
select t;
var list = tQ.ToList();
return View(list);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Audit(List<TRecord> list)
{
if (ModelState.IsValid)
{
db.Entry(list).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Audit");
}
return View(list);
}
视图是这样的:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Tid)
</th>
<th>
@Html.DisplayNameFor(model => model.Tname)
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Tid)
</td>
<td>
@Html.EditFor(modelItem => item.Tname)
</td>
</tr>
}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
我想将列表传递给控制器以将新变量保存到数据库中,但是在调试时我发现列表为“null”,请问我知道出了什么问题吗?
【问题讨论】:
-
看看你的 html 中有什么。我想您集合中的所有输入都具有相同的名称。要将多个项目绑定到一个集合中,您必须使用 [1..n] 对它们进行索引。
-
尝试将
foreach更改为简单的for循环并为每个模型使用索引数组,例如:@for (int i = 0; i < Model.Count; i++) { Html.DisplayFor(item => item[i].Tid); Html.EditFor(modelItem => item[i].Tname) },或者通过使用EditorForModel创建编辑器模板来使用更有条理的方式。 -
我认为这个链接会对你有所帮助。 how to pass list to controller
标签: c# asp.net asp.net-mvc