Несколько форм в одной форме MVC, данные модели не передаются в Action - PullRequest
0 голосов
/ 11 февраля 2019

Я создаю цикл объектов / форм, который позволит пользователю обновлять данные для каждого объекта в частичном представлении.Уникальные данные правильно отображаются в цикле форм, но когда я пытаюсь отправить в действие, данные модели, которые передаются в действие, остаются пустыми и не извлекают данные из формы, из которой я отправляю.

При отладке данные объекта успешно передаются каждому элементу var в цикле.

@ foreach (элемент var в ViewData ["CtaList"] как IEnumerable)

Пример.Есть 5 отдельных форм, которые создаются циклом, каждая из которых имеет собственную кнопку Сохранить и Удалить.Если я нажимаю Сохранить в 3-й форме в цикле, она переходит к действию, но модель MedInfoModel для этого отдельного объекта остается пустой.

Просмотр

@{
    ViewData["Title"] = "Edit";
    ViewData["hidePluginCSS"] = "yes";
    @model POR.Common.MedInfoModel;
}
@foreach (var item in ViewData["CtaList"] as IEnumerable<POR.Common.CtaListModel>)
{
    <div class="panel panel-default">
        <div class="panel-heading">
            <h3 class="panel-title">Edit CTA</h3>
        </div>
        <div id="partialPlaceHolder">
            @using (Html.BeginForm("SaveCtaInfo/" + item.CtaId, "Med", FormMethod.Post, new { @Id = item.CtaId, @class = "content-form form-horizontal" }))
            {
                <div class="panel-body">
                    <form class="content-form form-horizontal">
                        <div class="form-group justify-content-end">
                            <label for="inputEmail" autocomplete="false" class="col-md-9 control-label">Select Type</label>
                            @Html.DropDownListFor(m => item.CtaType, Model.CTATypeDropdown, new { @class = "form-control"})

                        </div>
                        <div class="form-group justify-content-end">
                            <label for="inputEmail" autocomplete="false" class="col-md-9 control-label">Select Priority</label>

                            @Html.DropDownListFor(m => item.CtaOrder, Model.CTAOrderDropdown, new { @class = "form-control" })

                        </div>

                        <div class="row mt-2">
                            <div class="col-md-12 r">
                                <button class="btn btn-raised btn-danger r" name="ctaSave" value="ctaDelete">Delete</button>
                                <button class="btn btn-raised btn-success r" name="ctaSave" value="ctaSave">Save</button>
                            </div>

                        </div>

                    </form>
                </div>
            }


        </div>
    </div>
}

Контроллер:

[HttpPost]
public ActionResult SaveCtaInfo(MedInfoModel model, int id)
        {

            string _sSubmit = Request.Form["ctaSave"].ToString();

            if (_sSubmit == "ctaSave")
            {
                // Code for cta save
                model.CtaActionType = "UPDATE";
                Helper.SQLSPCrudModel(ConnectionString, "storedProcedure", model);
            }
            else if (_sSubmit == "ctaDelete")
            {
                // code for cta delete
                model.CtaActionType = "DELETE";
                Helper.SQLSPCrudModel(ConnectionString, "storedProcedure", model);
            }

            return RedirectToAction("Edit/" + id);

}

Предоставленная форма HTML:

<form action="/Med/SaveCtaInfo%2F1000" class="content-form form-horizontal" id="1000" method="post">                <div class="panel-body">

                        <div class="form-group justify-content-end">
                            <label for="inputEmail" autocomplete="false" class="col-md-9 control-label">Select Type</label>
                            <select class="form-control" id="item_0__CtaType" name="item[0].CtaType"><option value="PDF">PDF</option>
<option selected="selected" value="Call">Call</option>
<option value="Menu">Menu</option>
<option value="Video">Video</option>
</select>

                        </div>
                        <div class="form-group justify-content-end">
                            <label for="inputEmail" autocomplete="false" class="col-md-9 control-label">Select Priority</label>

                            <select class="form-control" data-val="true" data-val-required="The CtaOrder field is required." id="item_0__CtaOrder" name="item[0].CtaOrder"><option value="0">0</option>
<option selected="selected" value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
</select>
                        </div>

                        <div class="row mt-2">
                            <div class="col-md-12 r">
                                <button class="btn btn-raised btn-danger r" name="ctaSave" value="ctaDelete">Delete</button>
                                <button class="btn btn-raised btn-success r" name="ctaSave" value="ctaSave">Save<div class="ripple-container"></div></button>
                            </div>

                        </div>


                </div></form>

РЕДАКТИРОВАТЬ:

Однако я только что заметил, что данные формы проходят через инструменты разработчика Chrome как:

  item[0].CtaType: Call
  item[0].CtaOrder: 1
  item[0].CtaLink: 

Где при успешной передаче модели в другое действие проходит как:

 CtaType: Call
 CtaOrder: 1
 CtaLink: 

Нужно ли настраивать действие по-другому, поскольку оно больше не является родительской моделью страницы?

1 Ответ

0 голосов
/ 13 февраля 2019

Ответом было просто заменить следующее в контроллере в исходном коде, который я разместил:

public ActionResult SaveCtaInfo(MedInfoModel model, int id)

на

public ActionResult SaveCtaInfo(MedInfoModel item, int id)

Спасибо за вашу помощь, mxmissile.Извините, что потратил ваше время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...