Обновите несколько элементов DOM, сделав только один вызов ActionResult

0

Мне нужно обновить несколько элементов DOM (в этом случае divs), когда я делаю определенный вызов в моем приложении MVC3. Все мои действия действуют в отдельных функциях со своими собственными моделями просмотров:

         public ActionResult Action3(ViewModel3 model)
    {
        return PartialView("_DomElement3", model);
    }

    public ActionResult Action2(ViewModel2 model)
    {
        return PartialView("_DomElement2", model);
    }

    public ActionResult Action1(ViewModel1 model)
    {
        return PartialView("_DomElement1", model);
    }

Здесь, как выглядят все три вида бритвы (просто с разными моделями):

      @model ViewModel1
      <div id='domElement1'>@Model.values1</div>

Я сделал это так, потому что их вызывали по требованию, и я думал, что больше ничего не вызовет их. Но я столкнулся со сценарием, когда мне придется обновлять все три элемента div после выполнения определенных критериев. Я сейчас делаю это так, и мне это не нравится:

           var values_1 = {'values1':'one'};
           $.ajax({
        url: '@Url.Action("Action1")',
        dataType: 'json',
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        data: values_1,
        success: function (data) {
            $('#domElement1').html(data);
           var values_2 = {'values2':'two'};
            $.ajax({
                url: '@Url.Action("Action2")',
                        dataType: 'json',
                        type: 'POST',
                        contentType: 'application/json; charset=utf-8',
                        data: values_2,
                        success: function (data) {
                            $('#domElement2').html(data);
           var values_3 = {'values3':'three'};
                            $.ajax({
                                url: '@Url.Action("Action3")',
                                                dataType: 'json',
                                                type: 'POST',
                                                contentType: 'application/json;                         charset=utf-8',
                                                data: values_3,
                                                success: function (data) {
                                                    $('#domElement3').html(data);

                                                }
                                            });

                        }
                    });

        }
    });

Как вы можете видеть, я звоню на сервер по одному. Кто-нибудь знает лучший способ обновить мои элементы только одним вызовом на сервер?

  • 1
    Создайте ViewModel со всеми тремя вашими моделями и верните их по мере необходимости.
  • 0
    @Jose Джозе - я как бы думал об этом. Я все еще ищу другое решение, если это возможно. Спасибо за ответ
Теги:
razor
asp.net-mvc

1 ответ

1
Лучший ответ

Мне нужно было бы создать пример приложения, чтобы проверить его, но одна возможность - иметь метод, который возвращает JSON. Этот ответ может вернуть массив частичных результатов:

[HttpPost]
public ActionResult SomeMethodName()
{
    /* get your data */

    var results = new List<ActionResult>();

    foreach(var model in YourCollection)
    {
        results.Add(new PartialResult("viewname", mode));
    }

    return Json(results.ToArray());
}

Это в значительной степени псевдо-код, но он должен иметь смысл.

  • 0
    Спасибо за ответ. Я знаю, куда ты идешь с этим, и мне это нравится. Я могу вызвать все 3 моих метода действий, объединить результаты в строку JSON, вернуть их в браузер и проанализировать строку для различных элементов dom. Неплохая идея. большое спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню