Я создаю цикл объектов / форм, который позволит пользователю обновлять данные для каждого объекта в частичном представлении.Уникальные данные правильно отображаются в цикле форм, но когда я пытаюсь отправить в действие, данные модели, которые передаются в действие, остаются пустыми и не извлекают данные из формы, из которой я отправляю.
При отладке данные объекта успешно передаются каждому элементу 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:
Нужно ли настраивать действие по-другому, поскольку оно больше не является родительской моделью страницы?