MVC возвращает частичное представление как JSON



есть ли способ вернуть строку 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);
}
562   3  

3 ответов:

вы можете извлечь строку 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);
}

вместо RenderViewToString Я предпочитаю подход, как

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

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

success: function(data) {
    $.post(data.Url, function(partial) { 
        $('#IdOfDivToUpdate').html(partial);
    });
}

Url.Действие ("зло", модель)

будет генерировать строку запроса get, но ваш метод ajax-post, и он будет выдавать статус ошибки 500(Внутренняя ошибка сервера). - Ферейдун Барикзехи 14 февраля в 9:51

Просто Добавьте "JsonRequestBehavior.AllowGet " на вашем объекте Json.

Comments

    Ничего не найдено.