Изменение ActionResult из Controller.View(объектная модель) при возврате JSON
Укороченная версия:
Как работает System.Web.MVC.Controller.View(объект)?
Длинная версия:
Мне нужно добавить в результаты JSON произвольную строку ( Unparsable Curft).
В чем я не уверен, так это в том, как я могу изменить ViewResult в ASP.NET MVC "конвейере". Я прочитал документы MSDN по этому вопросу, но мне все еще неясно, как к этому подойти.
- Как View(Object) возвращает строку JSON в этом случае?
Образец контроллера
[GridAction]
public ActionResult _SelectBatchEditingGrid(int? id)
{
// GridModel is of type IEnumerable if that matters.
// More info on the GridModel type see: http://www.telerik.com/help/aspnet-mvc/t_telerik_web_mvc_gridmodel_1.html
return View(new GridModel(SessionProductRepository.All())
}
Посмотреть образец
<% Html.Telerik().ScriptRegistrar()
.OnDocumentReady(() =>
{%>
/* Protect from setter-property hacks; see https://stackru.com/a/3147804/328397 */
$.ajaxSetup({
converters: {
"text cleanedjson": function(data) {
var jsonString = data.replace("throw 1; <dont be evil> ", "");
return $.parseJSON(jsonString);
} // End function
} // end conveter
}); // end ajaxsetup
- Каков наилучший подход к добавлению строки к моим данным JSON через
return View(someObject)
метод?
В идеале, добавление атрибута к каждому подходящему методу может быть лучшим способом, но я могу справиться с этим с помощью размышления, как только пойму, как изменить результат JSON.
1 ответ
JSON - это просто строка, поэтому вы можете манипулировать ею любым удобным способом, прежде чем ее вернуть. Не уверен, что запрашивает JSON, но если это просто запрос типа AJAX, использующий что-то вроде JQuery Post, вы можете сделать что-то подобное в своем контроллере. Вам не нужно возвращать View в ваших методах действия.
[HttpPost]
public string GetSomeJson()
{
MyObject mo = new MyObject();
JavaScriptSerializer serializer = new JavaScriptSerializer();
string json = serializer.Serialize(mo);
string unparsableJson = unparsableString + json;
return unparsableJson;
}