Передать идентификатор из Foreach в Html.BeginForm - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужно и 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 обрабатывает onClick, который будет передавать значения в innerHtml и отображать «окно»

  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;
            }
}

после нажатия на строку мы получим

after clicking on the row, we get this

мы можем щелкнуть вкладку БИЛЕТ

enter image description here

это 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>
            }

при отправке билета я хотел бы передать Id, который я могу получить из foreach в Контроллер, который обрабатывает МойPOST-запрос.

Самое близкое, что я должен был сделать, это передать его как значение в пределах

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

, но он всегда будет передавать идентификатор из последнего foreach элемента.

Я ценю всю помощь

1 Ответ

0 голосов
/ 27 сентября 2019

Попробуйте это.

  1. Назначить errorid скрытому полю в cshtml
@Html.HiddenFor(model => m.errorId)
Доступ к скрытому значению поля в вашем контроллере.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...