Хорошо, такая интересная проблема ...
Я возвращаю частичное представление в виде строки через в этом сообщении .
Вот как выглядит мой базовый контроллер:
public abstract class JsonController : Controller
{
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewEngineResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewEngineResult.View, ViewData, TempData, sw);
viewEngineResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
И вот как он используется:
ret = Json(RenderPartialViewToString("_ReportData", viewModel));
Однако, теперь результат этого представления слишком велик иЯ получаю страшную ошибку:
«Длина строки превышает значение, установленное в свойстве maxJsonLength».
Я не уверен, как это исправить.Очевидно, что параметр в файле web.config НЕ подчиняется стандартному JavaScriptSerializer, так как во многих документах об этом говорится.
Тем не менее, попытка пользовательских решений, таких как класс LargeJsonResult , просто приводит к сериализации строки дважды , что мне не нужно (и определенно не работает),Итак, я в растерянности.Конечно, должен быть способ справиться с этим, чтобы я мог вернуть частичное представление в виде строки, а также указать maxJsonLength ... Есть предложения?
И да, я знаю, что большая проблема здесь заключается в отправке слишком большого количества данных клиенту;эта проблема будет решена в будущем.Это проблема, которую мне нужно решить сейчас.Благодарю.
ОБНОВЛЕНИЕ - МОЕ ПОЛНОЕ РЕШЕНИЕ
Спасибо Сергею, у меня все получилось.В случае, если кто-то еще хочет сделать это таким образом, вот шаги.
Первым делом нужно создать класс LargeJsonResult, указанный здесь .
Затем я использовал свой базовый класс контроллера для вызова RenderPartialViewToString, который можно найти здесь .
Следующий код:
var serializer = new JavaScriptSerializer ();serializer.MaxJsonLength = Int32.MaxValue;var viewString = RenderPartialViewToString ("_ ReportData", viewModel);
ret = new LargeJsonResult()
{
Data = new
{
result = "Success",
html = viewString
}
};
Но была еще одна настройка, которая исправляла обратный вызов JQuery для извлечения html-части возврата.Функция обратного вызова изначально выглядела так:
функция GetReportComplete (response, status, xhr) {... $ ('# Report'). Html (response);
Но для этого нужно былонастроить так:
функция GetReportComplete (ответ, статус, xhr) {... $ ('# Report'). html ($. parseJSON (response) .html);
И с этим все работает.