后期操作中复杂参数中的所有值均为空

时间:2018-12-15 04:11:28

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

这是一个简单的MVC应用程序,可以读取和写入Excel文件。这三个步骤可以简化功能。

  1. 阅读预约的患者名单并将其显示给用户。
  2. 允许用户签入谁。
  3. 使用更新后的输入来更新Excel。
该应用程序可以从Excel工作表中正常读取,并在视图中显示所有记录,如下所示。但是,提交时,post操作中的参数(应该是从视图传递的模型)获得14行,但显示模型中所有属性的空值。希望下面的屏幕截图和代码可以帮助您理解此问题。感谢您的帮助/反馈

Excel外观如下 enter image description here

MVC视图显示如下 enter image description here


模型

public class Appointments
{
    public string Facility { get; set; }
    public string MRNumber { get; set; }
    public string GroupTopic { get; set; }
    public string LOC { get; set; }
    public bool CheckedIn { get; set; }
}

查看模型

public class AppointmentsViewModel
{
    public List<Appointments> appointments { get; set; }
}

索引HttpGet传递了一个显示14行的视图模型对象

public ActionResult Index()
{
   AppointmentsViewModel vm = new AppointmentsViewModel();

   //Some code is which populates vm with data from Excel        

   return View(vm);
}

索引HttpPost操作正在获取具有14个约会对象列表的虚拟机,但所有属性均显示为空

[HttpPost]
public ActionResult Index(AppointmentsViewModel vm)
{
  //Breakpoint
  //Some code to update Excel file
}

我在上面的“ Break Point”处放置一个断点,查看传递给vm的内容,它显示了所有14行,但具有空属性 enter image description here

在我看来,我确保我使用的是for循环而不是foreach,并且我对模型中的每个属性都使用@ Html.DisplayFor。另外,我的模型声明为
@model Scheduling_Demo.Models.AppointmentsViewModelCode,其视图位于以下

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{

    <table class="table" style="align-content:center">
        @*<tr>
            <th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().Facility)
            </th>
            <th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().MRNumber)
            </th>
            <th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().GroupTopic)
            </th>*@
        @*<th>
                @Html.LabelFor(model => model.appointments.FirstOrDefault().Date)
            </th>*@
        @*<th>
                    @Html.LabelFor(model => model.appointments.FirstOrDefault().LOC)
                </th>
                <th>
                    @Html.LabelFor(model => model.appointments.FirstOrDefault().CheckedIn)
                </th>
            </tr>*@

        @for (int t = 0; t < Model.appointments.Count; t++)
        {
            <tr>
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].Facility)
                </td>
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].MRNumber)
                </td>
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].GroupTopic)
                </td>
                @*<td>
                        @Html.DisplayFor(model => Model.appointments[t].Date)
                    </td>*@
                <td>
                    @Html.DisplayFor(model => Model.appointments[t].LOC)
                </td>
                <td>
                    @Html.CheckBoxFor(model => Model.appointments[t].CheckedIn)
                </td>
            </tr>
        }
    </table>
    <input type="submit" name="Submit" value="Submit" class="btn btn-info btn-sm" />
}

1 个答案:

答案 0 :(得分:0)

基于以上评论,由于成功传递的唯一值是@ Html.CheckboxFor的值,因此我搜索了为什么@ Html.DisplayFor没有将模型绑定到后期操作。下面链接的帖子回答了我的问题。感谢大家。希望这可以帮助其他人。
MVC4 Razor - @Html.DisplayFor not binding to model