Ищем общий шаблон с MVC2 / 3 - массовое представление / обновление модели - PullRequest
0 голосов
/ 14 февраля 2011

Я исследовал несколько различных сценариев относительно лучшего способа выполнения массового обновления (вид на модель) для списка объектов с привязкой к виду, но не нашел по-настоящему четкой методологии относительно «лучшего» способ сделать это. Я новичок в 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). * * тысяча двадцать два

Отсюда я понимаю, что контроллер не может создать Список. Может ли кто-нибудь указать мне, как выполнить этот тип «массовых» операций?

Спасибо всем заранее!

1 Ответ

0 голосов
/ 14 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...