问题
我有一些页面需要网站的动态数据来为用户生成输出。
一个简单的解决方案是aspx(php,...)页面,用于生成数据并创建另一个html页面,用作GUI从第一页检索数据并将其显示给用户。在这个方法中,我可以调用我的GUI页面,例如form1.aspx和我的数据页面form1.json.aspx。 虽然我个人喜欢这种方法,但在为它创建组件时却不合适。
目前我正在使用的另一种方法是使用相同的GUI页面调用本身和查询字符串来检索数据。此页面应检查该查询字符串,如果存在,则仅生成数据并从页面中删除其他所有内容。作为这个方法的一个例子,如果我调用我的页面form1.aspx,检索数据,我需要像form1.aspx一样调用它?JSON
这是我正在做的一个例子:
protected void Page_Load(object sender, EventArgs e) {
if (Request.QueryString.ToString().IndexOf("JSON") == 0){
this.Controls.Clear();
Response.Clear();
// send pure data to client
} else {
// render page as GUI
}
}
但是,如果我从某个模板页面添加母版页和/或继承我的页面,则此方法会变得太乱。母版页只能在Page_PreInit
中删除,这会增加另一种额外的方法。
安全控件导致另一个问题,如果用户长时间打开页面直到会话到期,任何检索数据的尝试都将失败,因为安全模块会将请求重定向到登录页面。
下一个问题是我无法在包中整合我的组件,因为它需要在页面中进行修改(删除母版页,清除页面组件......)。
我在寻找什么:
1-我正在寻找一种解决方案,我可以调用我的页面并获取纯数据(JSON或XML格式),这样做运行服务器端方法生成数据,所以我不必担心什么另一位设计师放入他们的母版页或模板。
2-我认为可以使用axd
扩展来执行此操作,但我对此没有任何线索,也找不到帮助文档。
3-有没有更好的方法来做到这一点。任何建议或解决方案,以提高这一点非常感谢。
答案 0 :(得分:2)
页面方法。查看此文章:http://weblogs.asp.net/craigshoemaker/archive/2008/09/29/using-jquery-to-call-asp-net-ajax-page-methods.aspx或http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/
WCF JSON服务:http://www.codeproject.com/Articles/327420/WCF-REST-Service-with-JSON
其他方法是使用HTTP处理程序。实现IHttpHandler接口并在Web.config文件中注册您的实现。稍后使用jQuery($ .get / $ .post)调用它:
修改强>
正如OP指出的那样,为了在页面方法中访问会话状态,您应该以这种方式使用WebMethodAttribute
:
[WebMethod(EnableSession = true)]
答案 1 :(得分:0)
我认为您可以使用webservice而不是aspx页面来返回JSON或XML字符串,然后调用程序页面(任何aspx页面)将在进程成功后响应。
因此,使用此Web服务,任何第三方页面都可以访问您的服务器端方法。
创建网络服务请查看此链接:Create and use Asp.net web service basic
此致