首页 > 解决方案 > 如何在门户设计模式下从 Kentico 中继器输出原始 JSON 页面

问题描述

在门户模式下,如何使页面仅输出其转发器 Web 部件的数据,而无需页面包装器 asp.net 表单等?

我已将页面模板继承设置为无,未选中标题继承,但无济于事,我仍在获取主题元素、asp.net 表单、html 标记头、正文和规范。我希望摆脱所有这些外围 html 元素,只保留原始 JSON 的转发器输出。

我想要实现的是使用转发器 Web 部件将原始 JSON 输出到页面,同时将转发器保留在 CMS 设计 UI 中,便于管理员管理。RAW JSON 将由 JQuery.get(..) 或等效项拾取,以照常读取 JSON 并解析它。

我已经尝试在同一页面上将 Kentico 自定义响应 Web 部件与中继器结合起来,但自定义响应当然会吹走任何其他页面输出。

如有必要,我愿意使用 ASPX + Portal 模板组合模式,但希望继续在设计界面中使用 Kentico Web 部件来生成数据。

在 DevNet 上找到了一个自定义响应中继器 Web 部件,但我更愿意自己管理设计模式,因为我可能想在其中添加一些额外的 Web 部件。

最终,如果它不可行或涉及太多复杂性,我将使用一个好的旧 ASP.NET ASHX 处理程序从 Kentico API 生成我需要的东西,并完全排除 Kentico 设计模式。

谢谢。

标签: web-partskentico

解决方案


您有什么理由不想使用现有的 Web 服务 /CMSPages/WebService.asmx?您可以创建自己的方法并在那里返回 json:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void GetMyData(string parameter = "")
{
    // Get your data
    DataTable myData = CustomTableItemProvider.GetItems("customtable.sampletable").Result.Tables[0];
    // return JSON
    string JSONString = Newtonsoft.Json.JsonConvert.SerializeObject(myData);
    this.Context.Response.ContentType = "application/json; charset=utf-8";
    this.Context.Response.Write(JSONString);
}

但我建议使用Web API


推荐阅读