【问题标题】:Data Not Pass to Controller数据未传递给控制器
【发布时间】:2017-07-20 10:43:13
【问题描述】:

我现在在单击提交按钮时显示数据列表,数据应该转到特定控制器,但我无法做到这一点。下面是我显示数据的部分视图:

@model IEnumerable<WebApplication1.Models.TicketDetails>

@using (Html.BeginForm("SubmitHours", "TicketDetails", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    if (Model.Count() > 0)
    {
        <hr />
        <table cellpadding="0" cellspacing="0">
            <tr>
                <th>Ticket No.</th>
                <th>Summary</th>
                <th>Status</th>
                <th>Action Date</th>
                <th>Billable Hours</th>
            </tr>
            @foreach (var ticketdata in Model)
            {
                <tr>
                    <td>@Html.DisplayFor(modelitem => ticketdata.TicketDetailsGuid)</td>
                    <td>@Html.DisplayFor(modelitem => ticketdata.Summary)</td>
                    <td>@Html.DisplayFor(modelitem => ticketdata.CAStatus)</td>
                    <td>@Html.DisplayFor(modelitem => ticketdata.ActionDate)</td>
                    <td>@Html.TextBox("Comment", null, new { @class = "form-control" })  </td>
                </tr>
            }

        </table>

    }
    <input type="submit" value="Submit" />
    @*<input type="button" value="Submit" onclick="location.href='@Url.Action("SubmitHours", "TicketDetails")'" />*@
}

显示上述数据的控制器如下:

public ActionResult Index()
        {
            List<TicketDetails> _TicketDetails = new List<TicketDetails>();
            _TicketDetails = (from ticketdata in _entities.AccMng_TicketDetails.AsEnumerable()
                                     select new TicketDetails
                                     {TicketDetailsGuid = ticketdata.TicketDetailsGuid,
                                      ActionBy = ticketdata.ActionBy,
                                     CAStatus = ticketdata.CAStatus,
                                     Comment = ticketdata.Comment,
                                     Summary = ticketdata.Summary}).ToList();

            return View(_TicketDetails);
        }

现在我只想将部分数据发送到特定控制器,但该数据未发送:

        [HttpPost]
        public ActionResult SubmitHours(List<AccMng_TicketDetails> _AccMng_TicketDetails)
        {
            return View(_AccMng_TicketDetails);
        }

【问题讨论】:

  • 您的表单不包含与 AccMng_TicketDetails 关联的属性的任何表单控件 - 您拥有的唯一表单控件是用于名为 Comment 的属性,因此方法参数需要为 IEnumerable&lt;string&gt; comment (作为旁注,您的TextBox() 正在生成重复的id 属性,这是无效的html)
  • @StephenMuecke 感谢您的回复,但删除评论文本框数据后没有通过
  • 如果您删除了文本框,则没有可以发布的内容。表单仅发布其表单控件的名称/值对(而您没有)

标签: sql asp.net-mvc entity-framework


【解决方案1】:

首先,正如@Leonardo 所说,我建议至少使用 List 而不是 IEnumerable 作为您的模型定义来使用基于索引的方法。如果您只是想只传回每一行的 cmets,请将注释框更改为基于表达式的帮助器,并为 GUID 添加一个隐藏字段(以便它回传到控制器)。

@for (var i = 0; i < Model.Count; i++)
{
     <tr>
       <td>
         @Html.DisplayFor(m => m[i].TicketDetailsGuid)
         @Html.HiddenFor(m => m[i].TicketDetailsGuid)
       </td>
       <td>@Html.DisplayFor(m => m[i].Summary)</td>
       <td>@Html.DisplayFor(m => m[i].CAStatus)</td>
       <td>@Html.DisplayFor(m => m[i].ActionDate)</td>
       <td>@Html.TextBoxFor(m => m[i].Comment, new { @class = "form-control" })  </td>
     </tr>
}

当页面回发时,它将回发一个对象列表,其中仅填充了 TicketDetailsGuid 和 Comment 字段(因为它们是 UI 中的输入)。

【讨论】:

    【解决方案2】:

    尝试使用 @EditorFor 而不是 DisplayFor 和 @for 而不是 @foreach 并使用它的索引来引用任何项目,例如

    @Html.EditorFor(model => model[i].Summary)
    

    【讨论】:

      猜你喜欢
      • 2020-12-28
      • 2020-09-17
      • 2015-09-08
      • 1970-01-01
      • 2020-05-15
      • 2018-03-20
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      相关资源
      最近更新 更多