Обновить модель данными из «другого» представления - MVC - PullRequest
0 голосов
/ 29 февраля 2012

Как я могу добавить новый элемент объекта в модель Main Views, созданную в другой модели?

Я пытаюсь добавить новый элемент в список, содержащийся в моей модели основного представления,

Перед добавлением этого элемента мне нужна информация о свойствах этого элемента, поэтому я использую представление, строго привязанное к модели, которая содержит необходимые поля ввода.Я сделал модель для этого представления в стиле оболочки, который содержит два объекта.Модель основного вида, а также модель для конкретного элемента.

MODEL

public class MDTCompletedJobM : BaseM
{
...
public MDTPartMList PartsList { get; set; }
...
}


public class MDTAddPartM
{
    public MDTPartM Part { get; set; }
    public MDTCompletedJobM CompletedJobM { get; set; }
    public List<string> PartTypes { get; set; }

    public MDTAddPartM()
    {
        Part = new MDTPartM();
        PartTypes = (List<string>)ConfigurationManager.GetSection("MTDataPartTypeList");
    }
}

, поэтому, когда представление вызывается из моего контроллера, я назначаю свою сетьпросматривает модель для этой модели и передает ее. Из представления «Добавить деталь» я затем использую пост-вызов Ajax для фактического добавления детали в этот список (CompletedJobM.PartsList).

Это работает нормально, кроме Iтеперь не знаю, как заставить мой основной вид знать, что в его модели есть дополнительный элемент в списке.Этот новый элемент не сохраняется нигде после добавления в список моделей, поэтому я не могу перезагрузить модель основного вида.Моя запись Ajax:

 $.ajax({
            type: "POST",
            cache: false,
            url: '@Url.Action("AddPart", "Jobs")', //$(this).attr("action"),
            data: $.toJSON(result),
            contentType: 'application/json',
            success: function (data) {

                $("#progressdiv").html();

                var isValid = $(data).find(".validation-summary-errors").length == 0;

                if (isValid) {
                    var pwindow = $("#Window").data("tWindow");
                    pwindow.close();
                    $('.page').html(data); <- what to do here?
                }
                else {

                    $("#resultDiv").html(data);
                }
            },

            beforeSend: function () {
                $("#progressdiv").html('<image src=@Url.Content("~/Content/Images/ajax-loader.gif") alt="Loading, please wait" />');
            },

            error: function (xhtr, e) {
                $("#progressdiv").html();
                alert(xhtr.responseText);
            }
        });

В настоящее время (так как я возвращаю представление) я попытался просто присвоить возвращенный HTML-тег тегу основного представления, но это вызвало проблемы с перекрывающимися экранами и дальнейшие проблемы обработкис нажатиями кнопок и пр.

Мой вопрос в верхней строке?Может я все об этом ошибся?

Спасибо

РЕДАКТИРОВАТЬ

Хорошо, позвольте мне немного перефразировать этот вопрос.Игнорируйте мой фактический код.Какие принципы или общую концепцию кто-то использовал бы для обновления модели одного представления (в данном случае списка) моделью из другого представления (формы ввода), чтобы при обновлении основного представления оно содержалоинформация из второго представления с учетом того, что после обновления / публикации второго представления оно не записывается ни в БД, ни где-либо еще.Это эффективно в памяти .

Спасибо

Ответы [ 2 ]

1 голос
/ 01 марта 2012

Я закончил тем, что сохранил мою модель в объекте Session, извлек ее и использовал ее при повторном рендеринге страницы.

0 голосов
/ 01 марта 2012

Так что, если я вас правильно понимаю:

  1. На вашем главном экране есть модель с PartsList
  2. В представлении «Добавить деталь» выполняется запрос ajax о добавленииновый элемент в PartsList (но не хранит его в БД ... так что он делает?)
  3. В БД ничего не сохраняется

Я думаюпроблема здесь - дизайн.Как основной вид изначально получает список деталей?Или оно начинается пустым, а детали добавляются с помощью «Добавить деталь»?

Если честно, я вижу 2 варианта:

  1. Перепроектируйте ваше приложение так, чтобы основной вид читал его PartsList из БД и «Добавить деталь» добавляет элементы в БД.Таким образом, после вызова ajax вы можете обновить основной вид.
  2. Сохранять состояние на стороне клиента: это может быть скрытый ввод, в котором вы сохраняете список деталей в виде строки, разделенной запятыми, и используете некоторый JavaScript для сохранениядобавить части и основной вид в синхронизации.Грязно, но выполнимо.

Я сильно склоняюсь к # 1.

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