Как можно обновить список объектов (часть большей модели) с помощью кнопок «Добавить» и «Удалить» в MVC с помощью вызовов AJAX? - PullRequest
4 голосов
/ 18 июля 2011

Ситуация выглядит следующим образом:

  1. У меня есть ViewModel со свойством List<Product>, где Product - это класс с, скажем, свойствами Property1, Property2и Property3.
  2. Я должен отобразить ViewModel, и я хочу отобразить List<Product> в таблице HTML, в каждой строке которой есть кнопка " Удалить " для этой строки.
  3. Под вышеупомянутой таблицей HTML должны быть 2 кнопки:

    3,1 " Добавить " - используется для добавления нового пустого Product всписок

    3.2 " Использовать список продуктов по умолчанию " - список должен быть загружен с помощью вызова AJAX для действия GetDefaultProduct() контроллера

  4. Нажатие на кнопку « Удалить », « Добавить » или « Использовать список продуктов по умолчанию » не должно публиковать всю страницу
  5. Модельсодержит и другие списки предметов - для примера: List<Sales>, List<Orders> и так далее.Я надеюсь, что смогу повторно использовать решение для Списка и для этих списков.

Есть ли способ сделать это с ASP.NET MVC?Если да, каков наилучший способ сделать это с ASP.NET MVC?

Я сделал это с помощью шаблонов jQuery и мне удалось реализовать это с помощью простых операций, но я должен сделать это в решении ASP MVCи я все еще пытаюсь освоить технологию.Я читал о шаблоне Editor, действии RenderAction, Async и частичных представлениях, и я пытаюсь составить решение с ними, и я опубликую его, если оно будет работать.

Заранее благодарим за любые предложения и комментарии!

ОБНОВЛЕНИЕ

Решение находится (как отметил Дарин) в сообщении Стив Сандерсона в блоге Тем не менее, он предполагает, что читатель знает о скрытом способе отображения списка объектов в CRUD-дружественном, индексированном виде.

Итак, чтобы помочь любому, кто хочетесть индексированный список сложных объектов, я предлагаю прочитать г-н.Сообщение в блоге Haacked: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx.

После того, как вы покончите с этим, вы можете перейти к блогу Сандерсона.Кстати, обратите внимание на пользовательский HTML-помощник BeginCollectionItem - его реализация не так проста, как можно подумать.Демонстрационный проект - это зрелище для воспаленных глаз - он прост и понятен.Предлагаемое решение использует некоторые вызовы jQuery.ajax() (для ссылки Add ), но просто из-за крайней необходимости.

PS: Это немного расстраивает, что приходится читать явную статьюот одного из разработчиков ASP.NET, чтобы выяснить, что в связывателе модели по умолчанию есть неявный CoC (Convention-over-Configuration) - он просто знает, как работать со списками, но не из коробкиПомощник HTML (или что-то подобное) не позволяет вам в этом.

Лично я считаю, что CRUD-дружественный рендеринг List<object> является очень распространенным сценарием, а не крайним случаем, поэтому он должен быть прощеиспользование и часть готового оборудования ASP.NET MVC.

Ответы [ 4 ]

1 голос
/ 18 июля 2011

Это очень простой способ сделать это, если вы хотите использовать Jquery.

ASP.Net MVC 3 JQGrid

1 голос
/ 18 июля 2011

Я бы порекомендовал вам прочитать следующую запись в блоге .Это определенно поставит вас на правильный путь для реализации сценария редактирования списка переменной длины.

0 голосов
/ 18 июля 2011

Может быть, это не тот ответ, который вы ищете, но, эй, попробуйте создать типизированное представление редактирования по умолчанию для модели, используя следующие настройки:

this will generate the folowing code for view (assuming Razor engine):

    @model IEnumerable<MvcApplication2.Models.User>

@{
    View.Title = "GetData";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>GetData</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th></th>
        <th>
            Name
        </th>
        <th>
            Description
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
        <td>
            @item.Name
        </td>
        <td>
            @item.Description
        </td>
    </tr>
}

</table>

Код, который будет обрабатывать редактирование / обновление / детали, примет Id объекта в качестве параметра. Это, в частности, другие методы вашего контроллера, которые будут обрабатывать редактирование / добавление / предварительный просмотр вашего элемента

0 голосов
/ 18 июля 2011

Избавьте себя от боли и загрузите Telerik Extensions для ASP.Net MVC . Это открытый исходный код (хотя есть платная опция).

Элемент управления Grid (возможно, в сочетании с элементом управления Window) предоставит вам все необходимые функции пользовательского интерфейса и множество примеров в Интернете.

В последнее время я много работал над интерфейсом мастера, и Telerik оказал мне огромную помощь.

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