Так что я пробовал разные вещи, но я застрял. Код для представленного ниже представления обернут в цикл 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> 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))
:
@Html.DropDownListFor(m => Model.EventList[idx].startMins, new SelectList(Model.minutes, Model.EventList[idx].startMins))
<!--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))
:
@Html.DropDownListFor(m => Model.EventList[idx].endMins, new SelectList(Model.minutes, Model.EventList[idx].endMins))
<!--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; }