MVC возвращает частичное представление как JSON - PullRequest
68 голосов
/ 19 января 2011

Есть ли способ вернуть строку HTML от рендеринга частичного как часть ответа JSON от MVC?

    public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model)
    {
        if (ModelState.IsValid)
        {
            if(Request.IsAjaxRequest()
                return PartialView("NotEvil", model);
            return View(model)
        }
        if(Request.IsAjaxRequest())
        {
            return Json(new { error=true, message = PartialView("Evil",model)});
        }
        return View(model);
    }

Ответы [ 3 ]

106 голосов
/ 19 марта 2011

Вы можете извлечь строку html из объекта PartialViewResult, аналогично ответу на эту тему:

Визуализация представления в виде строки

PartialViewResult и ViewResult являются производными от ViewResultBase, поэтому один и тот же метод должен работать на обоих.

Используя код из ветки выше, вы сможете использовать:

public ActionResult ReturnSpecialJsonIfInvalid(AwesomenessModel model)
{
    if (ModelState.IsValid)
    {
        if(Request.IsAjaxRequest())
            return PartialView("NotEvil", model);
        return View(model)
    }
    if(Request.IsAjaxRequest())
    {
        return Json(new { error = true, message = RenderViewToString(PartialView("Evil", model))});
    }
    return View(model);
}
30 голосов
/ 22 апреля 2012

Вместо RenderViewToString Я предпочитаю подход, подобный

return Json(new { Url = Url.Action("Evil", model) });

тогда вы можете поймать результат в вашем javascript и сделать что-то вроде

success: function(data) {
    $.post(data.Url, function(partial) { 
        $('#IdOfDivToUpdate').html(partial);
    });
}
0 голосов
/ 13 сентября 2018

Url.Action ("Зло", модель)

сгенерирует строку запроса get, но ваш метод ajax является post и выдает статус ошибки 500 (Internal Server Error),- Fereydoon Barikzehy 14 февраля в 9:51

Просто добавьте "JsonRequestBehavior.AllowGet" на свой объект Json.

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