在MVC中将数据从视图传递到控制器时,数据列表变为null

时间:2015-10-13 09:22:05

标签: asp.net-mvc asp.net-mvc-4 model-view-controller view

我是mvc的新手。我想从视图发送数据列表到控制器。我可以传递一个员工的详细信息,但不能通过列表。请给出一些建议来解决它。

错误: - enter image description here

我需要在控制器中获取Lidt。

  public class EmpDetails
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int OldSeq { get; set; }
    public int NewSeq { get; set; }
}
public class DetailsList
{
    public int Id { get; set; }
    public IEnumerable<EmpDetails> EmpDetailsList { get; set; }
}

在控制器中有两个方法get和post。在post方法获取id而不是list.it将变为null。

[HttpGet]
    public ActionResult EmployeeDetails()
    {
        List<EmpDetails> c2 = new List<EmpDetails>();
        EmpDetails model = new EmpDetails();


        model = new EmpDetails();
        model.Id = 2;
        model.Name = "Alex";
        model.OldSeq = 4;
        model.NewSeq = 5;
        c2.Add(model);

        DetailsList abc = new DetailsList();
        abc.Id = 1;
        abc.EmpDetailsList = c2;
        return View(abc);
    }
    [HttpPost]
    public ActionResult EmployeeDetails(DetailsList model)
    {

        return View("EmployeeDetails");
    }

在视图中我循环数据并显示。

      @using MvcDemo.Models
      @model  DetailsList

       @using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
     @Html.EditorFor(modelItem => modelItem.Id)
    <table>
        @foreach (var item in Model.EmpDetailsList)
        {
            <tr>
                <td>
                    @Html.EditorFor(modelItem => item.Id)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => item.OldSeq)
                </td>
                <td>
                     @Html.TextBoxFor(modelItem => item.NewSeq)
                </td>

            </tr>
        }
    </table>
        <input type="submit" value="Create" />
}

3 个答案:

答案 0 :(得分:1)

使用这样的编辑器模板。

  1. EditorTemplates文件夹中创建Views/Shared文件夹。
  2. 在该文件夹中创建名为EmpDetails.cshtml的文件。
  3. 将您的foreach标记放在该文件中,如

    @model EmpDetails
    <tr>
        <td>
            @Html.EditorFor(modelItem => Model.Id)
        </td>
        <td>
            @Html.TextBoxFor(modelItem => Model.Name)
        </td>
        <td>
            @Html.TextBoxFor(modelItem => Model.OldSeq)
        </td>
        <td>
            @Html.TextBoxFor(modelItem => Model.NewSeq)
        </td>
    </tr>
    
  4. 然后通过调用foreach方法(如

    )替换您的@Html.EditorTemplateFor
    @using MvcDemo.Models
    @model  DetailsList
    
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)
        @Html.EditorFor(modelItem => modelItem.Id)
        <table>
            @Html.EditorFor(m=>m.EmpDetailsList)
        </table>
        <input type="submit" value="Create" />
    }
    

答案 1 :(得分:0)

Beaches._ensureIndex({ "location": "2dsphere"});

答案 2 :(得分:0)

感谢您的快速回复。在@stephen评论的帮助下,我将IEnumerable集合更改为List。然后我用于循环而不是每个。请检查以下代码。

 public class DetailsList
{
    public int Id { get; set; }

    public List<EmpDetails> EmpDetailsList { get; set; }
}

 <table>
     @for(int item = 0; item < Model.EmpDetailsList.Count;item++ )
     {
            <tr>
                <td>
                    @Html.EditorFor(modelItem => modelItem.EmpDetailsList[item].Id)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => modelItem.EmpDetailsList[item].Name)
                </td>
                <td>
                    @Html.TextBoxFor(modelItem => modelItem.EmpDetailsList[item].OldSeq)
                </td>
                <td>
                     @Html.TextBoxFor(modelItem => modelItem.EmpDetailsList[item].NewSeq)
                </td>

            </tr>
     }
        </table>