Список, возвращающий ноль контроллеру на пост - PullRequest
0 голосов
/ 28 октября 2019

Так что я пробовал разные вещи, но я застрял. Код для представленного ниже представления обернут в цикл for:

@for (var idx = 0; idx < Model.EventList.Count; idx++)

Всякий раз, когда я нажимаю кнопку «отправить», свойство EventList модели контроллера имеет значение null, хотя я пытался что-то сделать, чтобы это работалов том числе помещаем оболочку формы вне цикла for, которая выдает ошибку «Элемент с тем же ключом уже добавлен». Это формы для нескольких событий в календаре, и мне нужно отображать поля редактирования отдельно для каждого элемента EventList.

Вот код:

Просмотр:

<div class="eventEdit hidden" id="eventEdit_@Model.EventList[idx].EventID">
                            <div class="container">
                                <div class="row">
                                    <div class="col-sm">
                                        <div class="row">
                                            <div class="col-sm card @cancelledColor">
                                                @using (Html.BeginForm("UpdateEvent", "Default", FormMethod.Post, new { enctype = "multipart/form-data" }))
                                                {
                                                    var eID = Model.EventList[idx].EventID;

                                                    @Html.HiddenFor(m => Model.toSelectEvents)
                                                    @Html.HiddenFor(m => Model.selectedDate)
                                                    @Html.HiddenFor(m => eID)
                                                    @Html.HiddenFor(m => Model.EventList[idx].EventID)
                                                    <div class="marginbottom10 row">
                                                        <div class="col-sm card whitetext padding10 @Model.EventList[idx].eventColor">
                                                            <div class="row">
                                                                <div class="col-sm-4">
                                                                    Event:
                                                                    <br />
                                                                    @Html.DropDownListFor(m => Model.EventList[idx].TypeID, new SelectList(Model.corpTypesList, "TypeID", "corpType", Model.EventList[idx].TypeID), new { @class = "font-weight-bold form-control" })
                                                                </div>
                                                                <div class="col-sm">
                                                                    Title: <br />
                                                                    @Html.EditorFor(m => Model.EventList[idx].Title)
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>

                                                    if (Model.EventList[idx].Cancelled != null && (bool)Model.EventList[idx].Cancelled)
                                                    {
                                                        <div class="row">
                                                            <div class="bold card col-sm ms-rteFontSize-3 text-center text-danger w-100">--- CANCELLED! ---</div>
                                                        </div>
                                                    }
                                                    <div class="row">
                                                        <div class="col-sm-auto m-auto nopadding">
                                                            @if (Model.EventList[idx].EventPhoto != null)
                                                            {
                                                                <img class="img-fluid" style="max-height: 32em" src="@Model.EventList[idx].photoURL" />
                                                            }
                                                        </div>
                                                    </div>
                                                    <div class="row">
                                                        <div class="col-sm ms-rteFontSize-3 padding10">
                                                            <p>
                                                                <span class="fa-bars fas"></span>&nbsp; EVENT DETAILS
                                                            </p>
                                                        </div>
                                                    </div>
                                                    <div class="row">
                                                        <div class="col-sm marginleft15 padding10">
                                                            <p>
                                                                @Html.TextAreaFor(m => Model.EventList[idx].EvDesc, new { rows = "5" })
                                                            </p>
                                                        </div>
                                                    </div>
                                                    <div class="row">
                                                        <div class="col-sm border border-top @cancelledColor padding20">
                                                            <p class="ms-rteFontSize-3">
                                                                <span class="fa-clock fas"></span> TIME
                                                            </p>
                                                            <p class="italic marginleft15 text-left">
                                                                <!-- Update/Edit Dates and Times. -->
                                                                <div class="row">
                                                                    <div class="col-sm-2">
                                                                        Start
                                                                    </div>
                                                                    <div class="col-sm">
                                                                        @Html.EditorFor(m => Model.EventList[idx].displayStartDate, new { @readonly = "readonly", data_provide = "datepicker", data_date_format = Web.GetDataDateFormat() })
                                                                    </div>
                                                                </div>
                                                                <div class="row">
                                                                    <div class="col-sm-2"></div>
                                                                    <div class="col-sm">
                                                                        @Html.DropDownListFor(m => Model.EventList[idx].startHour, new SelectList(Model.hours, Model.EventList[idx].startHour))
                                                                        &nbsp;:&nbsp;
                                                                        @Html.DropDownListFor(m => Model.EventList[idx].startMins, new SelectList(Model.minutes, Model.EventList[idx].startMins))
                                                                        &nbsp;
                                                                        <!--timeList  -->
                                                                        @Html.DropDownListFor(m => Model.EventList[idx].startTime, new SelectList(Model.timeList, Model.EventList[idx].startTime))
                                                                    </div>
                                                                </div>
                                                                <div class="row">
                                                                    <div class="col-sm-2">
                                                                        End
                                                                    </div>
                                                                    <div class="col-sm">
                                                                        @Html.EditorFor(m => Model.EventList[idx].displayEndDate, new { @readonly = "readonly", data_provide = "datepicker", data_date_format = Web.GetDataDateFormat() })
                                                                    </div>
                                                                </div>
                                                                <div class="row">
                                                                    <div class="col-sm-2"></div>
                                                                    <div class="col-sm">
                                                                        @Html.DropDownListFor(m => Model.EventList[idx].endHour, new SelectList(Model.hours, Model.EventList[idx].endHour))
                                                                        &nbsp;:&nbsp;
                                                                        @Html.DropDownListFor(m => Model.EventList[idx].endMins, new SelectList(Model.minutes, Model.EventList[idx].endMins))
                                                                        &nbsp;
                                                                        <!--timeList  -->
                                                                        @Html.DropDownListFor(m => Model.EventList[idx].endTime, new SelectList(Model.timeList, Model.EventList[idx].endTime))
                                                                    </div>
                                                                </div>
                                                            </p>
                                                        </div>
                                                        <div class="col-sm card @cancelledColor padding20">
                                                            <p class="ms-rteFontSize-3">
                                                                <span class="fa-map-marker-alt fas"></span> LOCATION
                                                            </p>
                                                            <div class="row">
                                                                <div class="col-sm-4 text-right">
                                                                    Location:
                                                                </div>
                                                                <div class="col-sm">
                                                                    @Html.DropDownListFor(m => Model.EventList[idx].LocationID, new SelectList(Model.locationList, "LocationID", "Location1", Model.EventList[idx].LocationID))
                                                                </div>
                                                            </div>
                                                            <div class="row">
                                                                <div class="col-sm-4 text-right">
                                                                    Office:
                                                                </div>
                                                                <div class="col-sm">
                                                                    @Html.DropDownListFor(m => Model.EventList[idx].OfficeID, new SelectList(Model.officeList, "OfficeID", "Office1", Model.EventList[idx].OfficeID))
                                                                </div>
                                                            </div>
                                                            <div class="row">
                                                                <div class="col-sm-4 text-right">
                                                                    Address:
                                                                </div>
                                                                <div class="col-sm">
                                                                    @Html.TextAreaFor(m => Model.EventList[idx].Info, new { rows = "5" })
                                                                </div>
                                                            </div>
                                                        </div>
                                                    </div>
                                                    <div class="bg-secondary row whitetext">
                                                        <div class="col-sm ms-rteFontSize-3 padding10">
                                                            Additional Info:
                                                            <br />
                                                            @Html.EditorFor(m => Model.EventList[idx].Extra)
                                                        </div>
                                                    </div>
                                                    <!-- Update event. -->
                                                    <div class="row paddingtop10">
                                                        <div class="col-sm"></div>
                                                        <div class="col-sm-auto">
                                                            <button class="btn btn-success" type="submit">
                                                                <div><span class="fas fa-check"></span> Update Event</div>
                                                            </button>
                                                        </div>
                                                    </div>
                                                }
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
            }

Контроллер:

[HttpPost]
    public ActionResult UpdateEvent(int eID, DefaultModel model)
    {
        ModelState.Clear();

        if (!model.isManagement())
            return RedirectToAction("Default", "Default");

        model.UpdateEvent(eID);
        model.Initialize();
        model.panel = "calendar";

        return View("Default", model);
    }

Модель:

public List<EventInfo> EventList { get; set; }
...