如何将视图中的列表传递(保存)到控制器?

时间:2017-03-16 07:37:04

标签: c# asp.net asp.net-mvc

我有一个这样的模型:

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”,我可能知道出了什么问题吗?

1 个答案:

答案 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?

MVC passing IEnumerable<CustomVM> to Controller

Pass IEnumerable list to controller