在ASP.NET MVC中发布后,Model.List为null

per*_*zzo 0 c# asp.net asp.net-mvc

我知道还有其他问题,但我想要更好的解释.

我想用我的Model.List显示一个表,在POST之后我仍然需要访问该列表.今天没有发生这种情况.

这是我的cshtml:

@foreach (var student in Model.ListSchedulingDetails)
    {
        <tr>
            <td width="150">
                @Html.DisplayFor(modelItem => student.SchedulingDate)
            </td>
            <td width="250">
                @Html.DisplayFor(modelItem => student.TeacherName)
            </td>
            <td width="250">
                @Html.DisplayFor(modelItem => student.StudentName)
            </td>
            <td width="150">
                @Html.DisplayFor(modelItem => student.SchedulingHour)
            </td>
            <td width="250">
                @Html.DisplayFor(modelItem => student.SchedulingObservation)
            </td>
        </tr>
    }
Run Code Online (Sandbox Code Playgroud)

POST后,我的Model.ListSchedulingDetails为null.发生了什么?

Ehs*_*jad 5

这里有两件事:

  1. DisplayFor()仅用于展示.对于发布,我们需要输入元素,如HiddenFor(),TextBoxFor()

  2. 您需要将它们编入索引以便在收集时回发,这样做foreach无济于事

你的代码需要像:

 @for (int i=0; i< Model.ListSchedulingDetails.Count; i++)
 {
     <tr>
        <td width="150">
            @Html.DisplayFor(modelItem => ListSchedulingDetails[i].SchedulingDate)
            @Html.HiddenFor(modelItem => ListSchedulingDetails[i].SchedulingDate)
        </td>
        <td width="250">
            @Html.DisplayFor(modelItem => ListSchedulingDetails[i].TeacherName)
            @Html.HiddenFor(modelItem => ListSchedulingDetails[i].SchedulingDate)
        </td>
        <td width="250">
            @Html.DisplayFor(modelItem => ListSchedulingDetails[i].StudentName)
           @Html.HiddenFor(modelItem => ListSchedulingDetails[i].SchedulingDate)
        </td>
        <td width="150">
           @Html.DisplayFor(modelItem => ListSchedulingDetails[i].SchedulingHour)
           @Html.HiddenFor(modelItem => ListSchedulingDetails[i].SchedulingDate)
        </td>
        <td width="250">
            @Html.DisplayFor(modelItem => ListSchedulingDetails[i].SchedulingObservation)
            @Html.HiddenFor(modelItem => ListSchedulingDetails[i].SchedulingDate)
        </td>
    </tr>
 }
Run Code Online (Sandbox Code Playgroud)

  • 虽然这绝对是一个可行的解决方案,但这并不是一个好主意.你应该永远不要发帖,因为它们存在于帖子之后.正确的方法是在发布后重建列表,再次从数据库中查询它,或者你是第一次得到它.如果您担心进行另一个查询,可以使用缓存. (2认同)