Обновление нескольких записей одновременно в MVC - PullRequest
0 голосов
/ 02 июля 2018

Попытка обновить более 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");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...