Попытка обновить более 1 записи с помощью отправки формы в MVC (перенос существующих данных в представление из БД и разрешение пользователю вносить изменения).
В представлении я могу вернуть столько существующих записей, сколько мне нужно, готовых к редактированию, без проблем:
@model IEnumerable<object>
@{
List<Portal.Models.Primary_Client> PClient = Model.ToList()[0] as List<Portal.Models.Primary_Client>;
List<Portal.Models.Primary_Dependent> PDependant = Model.ToList()[1] as List<Portal.Models.Primary_Dependent>;
List<Portal.Models.Primary_AnnExp> PAnnExp = Model.ToList()[2] as List<Portal.Models.Primary_AnnExp>;
List<Portal.Models.Primary_IncExp> PIncEx = Model.ToList()[3] as List<Portal.Models.Primary_IncExp>;
List<Portal.Models.Primary_InvAssets> PInvAssets = Model.ToList()[4] as List<Portal.Models.Primary_InvAssets>;
List<Portal.Models.Primary_Liabilities> PLiabilities = Model.ToList()[5] as List<Portal.Models.Primary_Liabilities>;
List<Portal.Models.Primary_LifeAssets> PLAssets = Model.ToList()[6] as List<Portal.Models.Primary_LifeAssets>;
ViewBag.Title = "Completed Form";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("EditPLA/" + newid, "Forms", FormMethod.Post))
{
for (int i = 0; i < PLAssets.Count; i++)
{
<div class="form-group">
@Html.HiddenFor(Model => PLAssets[i].LifAsset_ID)
@Html.HiddenFor(Model => PLAssets[i].PLForm_ID)
@Html.HiddenFor(Model => PLAssets[i].Client_ID_PriFK)
</div>
<div class="container">
<div class="row">
<div class="col-sm">
@Html.Label("Asset Type")
@Html.EditorFor(Model => PLAssets[i].PLAsset_Type, new { htmlAttributes = new { @class = "form-control" } })
</div>
<div class="col-sm">
@Html.Label("Asset Amount")
@Html.EditorFor(Model => PLAssets[i].PLAmount_Per_Annum, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
</div>
<br />
}
<div class="button" style="text-align:center;">
<input type="submit" class="btn btn-success" value="Save" />
<button class="btn btn-danger" data-dismiss="modal">Cancel</button>
</div>
}
Однако моя модель не заполняется должным образом, когда я отправляю форму, поскольку имена полей не проходят должным образом и не совпадают с именами полей моей модели. Я подозреваю, что это из-за того, как я создаю поля, используя цикл.
Имена полей моего редактора выглядят так:
<input class="form-control text-box single-line" id="CS___8__locals1_PLAssets_0__PLAmount_Per_Annum" name="CS$<>8__locals1.PLAssets[0].PLAmount_Per_Annum" type="text" value="3">
Когда я ожидал увидеть что-то похожее на это:
<input class="form-control text-box single-line" id="PLAmount_Per_Annum" name="PLAmount_Per_Annum" type="text" value="3">
Я полагаю, что это стало сложнее, чем обычно, потому что у меня есть несколько Моделей, переданных в мой Просмотр через Объект, но я не знаю, как еще создать эти поля с правильным именем.
К вашему сведению - мой контроллер выглядит так:
[HttpPost]
public ActionResult EditPLA(List<Primary_LifeAssets> Assets, int id)
{
if (ModelState.IsValid)
{
foreach (var i in Assets)
{
var c = db1.Primary_LifeAssets.Where(a => a.LifAsset_ID.Equals(i.LifAsset_ID)).FirstOrDefault();
if (c != null)
{
c.PLForm_ID = i.PLForm_ID;
c.PLAmount_Per_Annum = i.PLAmount_Per_Annum;
c.PLAsset_Type = i.PLAsset_Type;
}
}
db1.Entry(Assets).State = EntityState.Modified;
db1.SaveChanges();
ViewBag.Message = "Successfully Updated.";
return RedirectToAction("Existing/" + id, "Forms");
}
ViewBag.Message = "Save failed.";
return RedirectToAction("Existing/" + id, "Forms");
}