如何在门户设计模式下从 Kentico Repeater 输出原始 JSON 页面

How to output a raw JSON page from a Kentico Repeater in Portal Design mode

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

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

我想要实现的是使用 Repeater Web 部件将原始 JSON 输出到页面,同时将 Repeater 保留在 CMS 设计 UI 中,管理员可以轻松管理它。 RAW JSON 将由 JQuery.get(..) 或等价物读取 JSON 并像往常一样解析它。

我试过将 Kentico 自定义响应 Web 部件与同一页面上的转发器结合使用,但自定义响应当然会破坏任何其他页面输出。

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

我找到了一个 Custom Response Repeater web part on DevNet 但是我宁愿自己管理设计模式,因为我可能想在其中添加一些额外的 Web 部件。

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

谢谢。

您有什么理由不想使用现有的 Web 服务 /CMSPages/WebService.asmx?您可以创建自己的方法,然后 return 您 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

Kentico Marketplace 上有一个自定义 Web 部件,它允许您告诉页面您想要什么类型的输出,它称为 Web part to API Converter。下载该 Web 部件,将其导入并将其添加到您的页面模板。请务必更改您的页面模板,使其不会继承任何其他页面或模板。

然后您将该 Web 部件与 API 转换器 Web 部件关联到您的列表 Web 部件,这就像魔术(或基本编码)一样,它将您的 aspx 页面转换为任何格式的 "raw"您指定的输出。