如何在Portal Design模式下从Kentico Repeater输出原始JSON页面

时间:2018-05-11 22:58:17

标签: web-parts kentico

在Portal模式下,如何在不使用页面包装器asp.net表单等的情况下使页面仅输出其Repeater Web部件的数据?

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

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

我尝试在同一页面上将Kentico自定义响应Web部件与Repeater结合使用,但自定义响应当然会吹掉任何其他页面输出。

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

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

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

感谢。

2 个答案:

答案 0 :(得分:0)

您是否有任何理由不想使用现有的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

答案 1 :(得分:0)

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

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