如何在门户设计模式下从 Kentico 中继器输出原始 JSON 页面
Posted
技术标签:
【中文标题】如何在门户设计模式下从 Kentico 中继器输出原始 JSON 页面【英文标题】:How to output a raw JSON page from a Kentico Repeater in Portal Design mode 【发布时间】:2018-10-22 09:35:10 【问题描述】:在门户模式下,如何使页面仅输出其转发器 Web 部件的数据而没有页面包装器 asp.net 表单等?
我已将页面模板继承设置为无,未选中标题继承,但无济于事,我仍在获取主题元素、asp.net 表单、html 标记头、正文和规范。我希望摆脱所有这些外围 html 元素,只保留原始 JSON 的转发器输出。
我想要实现的是使用转发器 Web 部件将原始 JSON 输出到页面,同时将转发器保留在 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 设计模式。
谢谢。
【问题讨论】:
【参考方案1】:Kentico Marketplace 上有一个自定义 Web 部件,可让您告诉页面您想要什么类型的输出,它被称为 Web part to API Converter。下载该 Web 部件,将其导入并将其添加到您的页面模板中。请务必更改您的页面模板,使其不会继承任何其他页面或模板。
然后,您将该 Web 部件与 API 转换器 Web 部件关联到您的列表 Web 部件,这就像魔术(或基本编码),它将您的 aspx 页面转换为您指定的任何输出的“原始”格式。
【讨论】:
【参考方案2】:您有什么理由不想使用现有的 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
【讨论】:
感谢您的建议。问题中说明了我不想使用现有服务的原因:我想要生成可用于 Kentico 管理员的 json 的中继器。以上是关于如何在门户设计模式下从 Kentico 中继器输出原始 JSON 页面的主要内容,如果未能解决你的问题,请参考以下文章
Kentico 12 - 如何将单个页面设置为需要身份验证?
如何在没有多余换行符的情况下从 BeautifulSoup 输出 XML?
如何在不写入输出流的情况下从 ZipInputStream 获取每个 ZipFile 条目的字节/内容?