我有一个这样的模型:
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”,我可能知道出了什么问题吗?
答案 0 :(得分:2)
假设您有IEnumerable<TRecord>
作为要查看的模型绑定,您可以使用模型中每个属性的索引数组将foreach
循环更改为for
循环,并将绑定类型设置为{{1} }与控制器输入参数匹配:
IList
发布@model IList<TRecord>
@using (Html.BeginForm())
{
// display names area
@for (var i = 0; i < Model.Count; i++)
{
<tr>
<td>
@Html.DisplayFor(item => item[i].Tid)
</td>
<td>
@Html.EditFor(item => item[i].Tname)
</td>
</tr>
}
// submit button area
}
集合的另一种方法是创建编辑器模板并在其中放置HTML帮助程序,然后使用IEnumerable
(请参阅Darin Dimitrov的方法here)。
类似问题:
How to pass IEnumerable list to controller in MVC including checkbox state?