Обновление частичной области MVC3 - PullRequest
3 голосов
/ 09 мая 2011

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

Сейчас я использую jquery для запроса ajax.

Небольшой контекст: у меня есть список «Коллекций», которые я обернул в частичное представление, просто выполняя для каждого список в модельном объекте рассматриваемого представления.

Затем у меня есть кнопка «Добавить коллекцию», в которой просто отображается модальное диалоговое окно с формами для добавления новой коллекции. После нажатия «добавить» ajax-запрос создает коллекцию в базе данных и в настоящее время возвращает объект JSON, указывающий на успех, вместе со строкой «Коллекция создана». В своем обработчике jquery ajax я проверяю этот объект json, чтобы проверить, имеет ли статус «успех», а затем использую jquery для отображения похожего на рычание уведомления, содержащего строку «Коллекция создана».

Теперь мой вопрос: могу ли я в любом случае обновить свой список коллекций в этом запросе ajax? Можно ли как-нибудь отбросить частичное представление, итерируя коллекции, обратно с успешным объектом json как-нибудь?

Проще говоря: я бы хотел как-то обновить HTML, но при этом сохранить объект JSON, чтобы я мог отображать свое уведомление.

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Да, вы можете визуализировать ваше частичное как строку и обернуть его как JSON.Я использую этот метод довольно часто, но я слышал, что люди говорят, что это плохая практика.До сих пор у меня не возникало никаких проблем, и я использовал его в течение нескольких лет.

Я фактически использую пользовательский ActionResult, который возвращает JSON.Он объединяет несколько представлений и отправляет их обратно клиенту в виде массива строк.Бит "не так просто" отображает представления как строки из действия контроллера.Вот код для этого:

    public static string RenderViewToString(ControllerContext controllerContext, string viewPath, ViewDataDictionary viewData, TempDataDictionary tempData)
    {
        ViewEngineResult result = ViewEngines.Engines.FindPartialView(controllerContext, viewPath);

        if (result == null || result.View == null)
            throw new Exception("No view found for the following path: " + viewPath);

        ViewContext viewContext = new ViewContext(controllerContext, result.View, viewData, tempData, new StringWriter());

        HtmlHelper helper = new HtmlHelper(viewContext, new ViewPage());

        return helper.Partial(viewPath, viewData).ToHtmlString();
    }
1 голос
/ 09 мая 2011

Вы всегда можете сделать два ajax-запроса в обработчике отправки. Каждый запрос будет вызывать другое действие контроллера (Создать, Список).

Если у вас это не сработало, рассматривали ли вы сообщение об успешном завершении внутри частичного?

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