Как вернуть две части в одном вызове AJAX - PullRequest
0 голосов
/ 07 сентября 2018

В моем контроллере я возвращаю партиал через AJAX, есть ли способ загрузить два партиала через вызов AJAX?

// AJAX?
        if (!Request.IsAjaxRequest())
        {
            return View(model);
        }
        return PartialView("_ViewSongAmendmentsWriters", model);

1 Ответ

0 голосов
/ 07 сентября 2018

Один из способов сделать это - вернуть JsonResult, содержащий html для обеих частичек. Мы используем расширение для преобразования частичного в HTML для возврата в вызовах AJAX.

Это расширение является расширением на Controller:

public static class ControllerExtensions
{
    public static string PartialViewToHtml(this Controller controller, string viewName)
    {
        return controller.PartialViewToHtml(viewName, null);
    }

    public static string PartialViewToHtml(this Controller controller, string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

        if (model != null)
            controller.ViewData.Model = model;

        using (var writer = new StringWriter())
        {
            var result = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
            var context = new ViewContext(controller.ControllerContext, result.View, controller.ViewData, controller.TempData, writer);
            result.View.Render(context, writer);
            return writer.GetStringBuilder().ToString();
        }
    }
}

После этого вы можете написать Action следующим образом:

// AJAX?
if (!Request.IsAjaxRequest())
{
    return View(model);
}
return Json(new 
{ 
    html1: this.PartialViewToHtml("_ViewSongAmendmentsWriters", model), 
    html2: this.PartialViewToHtml("_PartialView2", model2) 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...