【问题标题】:Pass ID from Foreach to Html.BeginForm将 ID 从 Foreach 传递到 Html.BeginForm
【发布时间】:2019-09-27 08:30:25
【问题描述】:

我需要我的模型中的 ID @item.errorId 在提交表单时循环 foreach 以传递,因为必须将提交的表单跟踪回确切的行。

我尝试创建一个单页应用程序。

这是我创建表格的 CSHTML

   <tbody>
            @foreach (var item in Model.LogItems)
            {
                <tr href="#/" onclick="createTicket('@HttpUtility.JavaScriptStringEncode(item.Type)', '@HttpUtility.JavaScriptStringEncode(item.TimeUtc.ToString())', '@HttpUtility.JavaScriptStringEncode(item.Host)', '@HttpUtility.JavaScriptStringEncode(item.Message)', '@HttpUtility.JavaScriptStringEncode(item.Source)', '@HttpUtility.JavaScriptStringEncode(item.User)', '@HttpUtility.JavaScriptStringEncode(item.AllXml)', '@HttpUtility.JavaScriptStringEncode(item.ErrorId.ToString())')" style="cursor: pointer">
                    <td scope="row"> @(rowNo += 1) </td>
                    <td style="white-space: nowrap;">
                        @item.TimeUtc
                    </td>
                    <td style="word-wrap:break-word; max-width: 250px;">
                        @item.Type
                    </td>
                    <td>@item.Host</td>
                    <td style="max-width: 200px; word-wrap:break-word;"> @item.Message</td>
                    <td>
                        @item.Source
                    </td>
                    @if (item.User != "")
                    {
                        <td>@item.User</td>
                    }
                    else
                    {
                        <td><i>null</i></td>
                    }
                    <td>@item.AllXml.Split('"')[1].Split('"')[0]...</td>
                    <td style="white-space: nowrap;"> <button class="btn btn-link btn-xs">Dismiss</button></td>
                </tr>
            }
        </tbody>

Javascript 处理将值传递给innerHtml 并显示“窗口”的 onClick

  function createTicket(type, time, host, message, source, user, xml, errorid) {        

        if (ticketSwitch == true) {
                popup.style.visibility = "visible";
                cardHeader.innerHTML = type;
                timeForLogs.innerHTML = time;
                cardHost.innerHTML = host;
                cardMessage.innerHTML = message;
                cardSource.innerHTML = source;
                cardUser.innerHTML = user;
                cardText.innerText = xml;
                id.innerHTML = errorid;
                ticketSwitch = false;
            }
}

点击行后,我们得到这个

我们可以点击门票标签

这是 CSHTML BeginForm

 @using (Html.BeginForm("Index", "Ticket", FormMethod.Post))
            {
                <div>
                    <br />
                    <div style="background-color:#2C3E5070; color: white; padding: 3px; border-radius:3px; font-weight: 300;">
                        <a style="font-size: 0.9em">Create Issue</a>
                    </div>
                    <br />
                    <form>
                        <span style="font-size: 0.8em">Project<sup class="star">*</sup></span> @Html.DropDownListFor(m => model.fields.project.key, (IEnumerable<SelectListItem>)ViewBag.Projects, "<select>", new { @class = "form-control input-sm my-size-text-area input-background" })
                        <br />
                        <span style="font-size: 0.8em">Issue type</span> @Html.DropDownListFor(m => model.fields.issuetype.name, new List<SelectListItem> { new SelectListItem { Text = "Bug", Value = "Bug" }, new SelectListItem { Text = "Feature", Value = "Feature" }, new SelectListItem { Text = "Task", Value = "Task" }, }, new { @class = "form-control input-sm my-size-text-area input-background" })
                        <br />
                        <span style="font-size: 0.8em">Assignee<sup class="star">*</sup></span> @Html.DropDownListFor(m => model.fields.assignee.name, (IEnumerable<SelectListItem>)ViewBag.Users, "<select>", new { @class = "form-control input-sm my-size-text-area input-background" })
                        <br />
                        <span style="font-size: 0.8em">Summary<sup class="star">*</sup></span>@Html.TextBoxFor(m => model.fields.summary, new { @class = "form-control input-sm my-size-text-area input-background" })
                        <br />
                        <div class="form-group">
                            <span style="font-size: 0.8em">Description<sup class="star">*</sup></span> @Html.TextAreaFor(m => model.fields.description, 5, 60, new { @class = "form-control my-size-text-area input-background" })
                        </div>
                        <br />
                        <input style="font-size: 0.8em !important;" onclick="loadingOverlay()" id="Submit" class="btn btn-primary float-right" type="submit" value="Create" />
                    </form>
                </div>
            }

在提交票证时,我想将从 foreach 获得的 ID 传递到处理我的 POST 请求的控制器中。

最近我要做的就是将它作为一个值传递给

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

但这总是会从最后一个 foreach 项目传递 id。

感谢所有帮助

【问题讨论】:

  • 请准确说明您的要求。
  • 我已经编辑了帖子并尽可能地澄清了。谢谢
  • 尝试在具有类名的行上单击事件,在那里声明您自己的属性并使用 'this' 关键字在 javascript 中访问它们。这可能是为了解决您的问题。
  • 这将返回一个空日志` jQuery(document).ready(function($) { $(".rowId").click(function () { var id = $(this). val(); console.log(id) }); });` 但我可以只记录this 它会返回一个完整的元素,在里面我们得到 value="",但我没有不知道如何访问它
  • 你不会这样。在 custome\ 属性中传递你的 errorid,然后像 &lt;tr data-id="{errorid}" ...&lt;/tr&gt; 和点击事件 $(this).data("id") 一样访问它。

标签: javascript c# html model-view-controller


【解决方案1】:

试试这个。

  1. 将errorid分配给cshtml中的隐藏字段
@Html.HiddenFor(model => m.errorId)
  1. 访问控制器中的隐藏字段值。

【讨论】:

  • 我已经更正了我的帖子,以澄清在这种情况下 ID 不是行号,而是@item.errorId,如果我尝试像这样传递它onclick="createTicket('@HttpUtility.JavaScriptStringEncode(item.errorId)',......",它将始终是最后一个 id表
  • OK...然后您可以尝试在cshtml中添加隐藏字段...隐藏字段将作为表单的一部分发送到控制器
猜你喜欢
  • 2017-08-24
  • 1970-01-01
  • 2021-01-27
  • 2022-01-26
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多