Я исследовал несколько различных сценариев относительно лучшего способа выполнения массового обновления (вид на модель) для списка объектов с привязкой к виду, но не нашел по-настоящему четкой методологии относительно «лучшего» способ сделать это. Я новичок в MVC и учу себя, возвращаясь к некоторым нашим внутренним приложениям и воссоздавая их под MVC 2. Мне было легко обрабатывать обновления отдельных объектов, но множественные числа доставляют мне некоторые проблемы.
Немного фона ...
Скажем, у вас есть представление, чей объект модели представляет собой список. Когда страница отображается, представление выполняет итерацию коллекции модели и создает единую форму с серией текстовых полей, меток и прочего, относящегося к пользовательскому интерфейсу ... Подумайте о расписании, показывающем дни недели, и двух полях, отображающих «часы». и «сверхурочные часы». Отображаемая страница имеет одну HTML-форму, действие которой «обновить» и принимает аргумент List. Существует один вход, который вызывает это действие. Предполагаемое поведение заключается в том, что представление отправляет все объекты обратно в контроллер для обновления. Например, если расписание работ было загружено в пятницу, а часы со вторника были завершены ранее, пользователь может изменить часы вторника, добавить больше часов в другие дни недели, удалить часы и т. Д. - все с помощью единственной кнопки «Отправить». ,
Я, очевидно, могу делать отдельные обновления, но я ищу способ сделать это навалом.
Я собрал небольшой пример, который хотел бы решить, прежде чем приступить к работе с расписанием.
Пример действия контроллера:
public ActionResult Index()
{
List<SampleModel> data = _repo.List();
return View(data);
}
Пример действия «сохранить»:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(List<SampleModel> mod)
{
//Save code removed
return RedirectToAction("Index");
}
Образец создаваемой формы:
<% using (Html.BeginForm("Save", "Home"))//,new {Collection= Model}
{ %>
<div class="cont">
<% for (int i = 0; i < Model.Count; i++)//foreach (var a in Model)
{
var a = Model[i];%>
<div class="child">
<div class="header">
<img alt="" src="../../Img/no.png" class="close" />
<h3><%: Html.Label(a.Name)%></h3>
</div>
<div class="info">
<%: Html.TextAreaFor(r => a.Msg) %>
<br />
<% for (int t = 0; t < a.Hours.Count; t++)
{ %>
<p>
<%: Html.Label("Hours") %>
<%: Html.TextBoxFor(m => a.Hours[t]) %>
</p>
<%} %>
</div>
</div>
<% } %>
<br class="clr" />
<input type="submit" value="Save Changes" />
</div>
<% } %>
Хотя этот образец не совсем воссоздает то, что мне нужно сделать, он достаточно близок, чтобы дать общее представление. У нас есть модель с общим списком, каждый объект в списке имеет редактируемое свойство и коллекцию объектов, которые также можно редактировать.
Когда вызывается метод контроллера, возвращаемый список является нулевым. Изучая трассировку Fiddler, я вижу возвращающиеся пары значений и имен, но им предшествует ссылка на локальную переменную итератора (например: a.Msg = update & a.Hours% 5B0% 5D = 1 & a.Hours% 5B1% 5D = 1 & a.Hours% 5В2% 5D = 12 & a.Msg = Привет + от + ID +% 23 + 1 & a.Hours% 5B0% 5D = 39 & a.Hours% 5B1% 5D = 43 & a.Hours% 5В2% 5D = 21 & a.Msg = Привет + от + ID +% 23 + 2 & a.Hours% 5B0% 5D = 18 & a.Hours% 5B1% 5D = 41 & a.Hours% 5В2% 5D = 26 & a.Msg = Привет + от + ID +% 23 + 3 & a.Hours% 5B0% 5D = 27 & a.Hours% 5B1% 5D = 9 & a.Hours% 5В2% 5D = 28). * * тысяча двадцать два
Отсюда я понимаю, что контроллер не может создать Список. Может ли кто-нибудь указать мне, как выполнить этот тип «массовых» операций?
Спасибо всем заранее!