Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PartialView в JSON, The best way in ASP .Net MVC 
V
    Опции темы
Любитель
Дата 8.10.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Проблема банальна - есть несколько контролов, надо их отрендерить и вернуть разными полями в JSON-объекте. Решается проблема тоже тривиально - если понакопипастить кода из PartialViewResult. Вообще решил ещё банальней - создав отдельный контрол, вызывающий Html.RenderPartial для нужных контролов. Благо контент вообщем-то был практически монолитный (сепараторный див мне не жалко переслать лишний раз..).

Но.. ведь может понадобится лоадить просто различные блоки. Костыльный вариант (возвращать сплошной хтмл разбивать по блокам на клиенте) явно не катит. Вариант с копипастом кода из PartialViewResult/ViewResultBase формально подходит, но.. Неужели нету штатного варианта?


--------------------
PM MAIL ICQ Skype   Вверх
Veitmen
Дата 9.10.2009, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: нет
Всего: 4



Приветствую.

Надеюсь я правильно понял вашу задачу. Вы хотите после каких то действий пользователя перерендерить контрол и показать его. Верно? Но я не совсем понял зачем вы хотите возвращать набор контролов в JSON. Т.е. рендерит вы будете прямо в контроллере? Или я не верно понял?

Можно просто перендерить определенный див со всеми контролами на нем, или положить отдельные контролы в отдельные дивы и перендерить каждый див. Этот мехнаизм поддреживает Asp.Net MVC. Погуглите на тему AJAX partial render.

Если это то что вам нужно, могу скинуть сэмпл.

Добавлено @ 05:57
Посмотрите на на Ajax.ActionLink с опцией UpdateTargetId. Мне кажется это то что вам нужно.

Код

<%=Ajax.ActionLink("Просроченные", "BadTask", "Task",null, new AjaxOptions(){UpdateTargetId="TasksTable"}) %>

Код

    public ActionResult BadTask()
        {
            CurrentShow = TypeShowTask.Bad;
            WTRSecurityController securityController = Factory.CreateSecurityController();
            Person p = securityController.CurrentWTRPerson;

            ViewData["Person"] = p;
            if (Request.IsAjaxRequest())
            {
                return PartialView("TasksControl", FilterByCurrentShow(p.Tasks.ToList()));
            }

            return View(FilterByCurrentShow(p.Tasks.ToList()));
        }



Это сообщение отредактировал(а) Veitmen - 9.10.2009, 06:07
PM MAIL ICQ   Вверх
Veitmen
Дата 9.10.2009, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: нет
Всего: 4



Все, понял ваш вопрос. 

Вы можете перендерить ваш контрол. Если вы хотите перерендерить группу контролов, создайте контрол включающий в себя другие контролы. Вариант с рендером какого либо контрола из группы мне не известен. Покопайте в сторону опций аякса, может быть там что нибудь будет, но я сомневаюсь.

Это сообщение отредактировал(а) Veitmen - 9.10.2009, 06:34
PM MAIL ICQ   Вверх
Любитель
Дата 9.10.2009, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Я хочу вернуть JSON с несколькими отрендеренными контролами. И затем на клиенте уже раскидать хтмл - что куда надо. Это делается, но.. как-то некрасиво. Странно, что нету готового солюшена :(

Это сообщение отредактировал(а) Любитель - 9.10.2009, 06:48


--------------------
PM MAIL ICQ Skype   Вверх
Veitmen
Дата 9.10.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: нет
Всего: 4



Цитата(Любитель @ 9.10.2009,  06:44)
Я хочу вернуть JSON с несколькими отрендеренными контролами. И затем на клиенте уже раскидать хтмл - что куда надо. Это делается, но.. как-то некрасиво. Странно, что нету готового солюшена :(

Да, такого готового решения я не встречал. Только рендер дива конкретного.
PM MAIL ICQ   Вверх
Любитель
Дата 11.10.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Можно вернуть PartialViewResult, можно JsonResult. А вот скомбинировать (одним движением) - нельзя. Вообщем, считаем вопрос решённым и минус в сторону дизайна ASP .Net MVC (ну.. не то, чтоб минус - но рендеринг partial view в произвольный стрим или как-то так надо было вынести в доступные в контроллере методы).

Это сообщение отредактировал(а) Любитель - 11.10.2009, 21:00


--------------------
PM MAIL ICQ Skype   Вверх
Veitmen
Дата 12.10.2009, 04:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 10.11.2006
Где: СПБ

Репутация: нет
Всего: 4



Цитата(Любитель @  11.10.2009,  21:00 Найти цитируемый пост)
(ну.. не то, чтоб минус - но рендеринг partial view в произвольный стрим или как-то так надо было вынести в доступные в контроллере методы)

Мне кажется это противоречит самому MVC. Нет?

Цитата(Любитель @  11.10.2009,  21:00 Найти цитируемый пост)
Можно вернуть PartialViewResult, можно JsonResult. А вот скомбинировать (одним движением) - нельзя.

Да, но если честно, ни разу мне это не понадобилось. smile
PM MAIL ICQ   Вверх
Любитель
Дата 12.10.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(Veitmen @  12.10.2009,  04:49 Найти цитируемый пост)
Да, но если честно, ни разу мне это не понадобилось. 

Значит не приходилось возвращать клиенту несколько независимых хтмл-блоков smile

Цитата(Veitmen @  12.10.2009,  04:49 Найти цитируемый пост)
Мне кажется это противоречит самому MVC. Нет?

В чём противоречие?!


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.2493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.