我有这样一个模型:我怎样才能从视图传递(保存)列表到控制器?
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]索引。 – sephirot
尝试将'foreach'改为简单'for'循环,并为每个模型使用索引数组,例如:'@for(int i = 0; i item [i ] .Tid); Html.EditFor(modelItem => item [i] .Tname)}',或者通过使用'EditorForModel'创建编辑器模板来更有组织的方式。 –
我觉得这个链接对你有帮助。 [如何将列表传递给控制器](http://stackoverflow.com/questions/12888248/submit-a-list-from-view-to-controller) –