MVC кнопка отправки всегда отправляет первую запись детали на POST - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть foreach l oop на странице MVC. как ниже. Но когда я отправляю форму, используя кнопку отправки, она всегда отправляет первую запись. Невозможно понять, почему так происходит. Ценю помощь.

@model IEnumerable<DeployModel>
 
 
@using (Html.BeginForm("Index", "Dep", FormMethod.Post))
{
     
        <div class="col-md-11">
            <!-- Modal content-->
            <div class="modal-content">
               
                <div class="modal-body" id="modal-body" style="overflow-y: auto">
              
                    
                    @if (Model != null && Model.Any())
                    {
                         
                        <div>

                            <table class="table table-condensed table-hover table-bordered">
                                <thead>
                                <th>
                                    S1 Name
                                </th>
                                <th>
                                    S2 Name
                                </th>
                                <th>
                                    Old Version
                                </th>
                                <th>
                                    New Version
                                </th>
                                
                                <th>
                                    Status
                                </th>
                                
                                </thead>
                                <tbody>
                                    @foreach (var item in Model)
                                    {
                                        <tr>
                                            <td>
                                                @Html.DisplayFor(o => item.S1)
                                            </td>

                                            <td>
                                                @Html.DisplayFor(o => item.S2)
                                            </td>

                                            <td>
                                                @Html.DisplayFor(o => item.OldVersion)
                                            </td>

                                            <td>
                                                @Html.DisplayFor(o => item.NewVersion)
                                            </td>
                                            <td>
                                                @Html.DisplayFor(o => item.Status)
                                            </td>

                                           
                                            <td>
                                               
                                          <button name="SubmitButton" class="btn action-btn" type="submit" > Submit                                                </button>
                                            </td>
                                             
                                        </tr>
                                    }
                                </tbody>
                            </table>
                        </div>
                    }
                </div>
               
            </div>

        </div>
    </div>

}

Действие My Controller выглядит как, но оно всегда получает первую запись независимо от нажатия кнопки.

[HttpPost]
public ActionResult Index(DeployModel deployModel)
{
   //TODO code
}

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Здесь есть пара проблем. Во-первых, Html.DisplayFor просто напишет отображаемую строку для значения выбранного свойства, и ничто не сообщит браузеру, что это данные формы, подлежащие отправке. Другое - все ваши кнопки отправки имеют одинаковую форму. Есть несколько способов решить эти проблемы. Я бы предложил создать отдельную форму для каждого экземпляра DeployModel и создать скрытые входные данные для каждого свойства, которое вы ожидаете получить при отправке формы:

// inside your foreach loop
@using (Html.BeginForm("Index", "Dep", FormMethod.Post))
{
    <input type="hidden" name="S1" value="@item.S1" />
    <input type="hidden" name="S2" value="@item.S2" />
    ...
    <input type="submit" value="Submit" />
}

Также обратите внимание, что если вы используете этот метод, вы должны удалить внешнюю форму - вам не нужны вложенные формы!

1 голос
/ 16 апреля 2020

Для каждого входа необходимо указать другое имя.

exmaple

@Html.DisplayFor(o => item.S1, new { name = "input1" })
...