1

问题

我有一些页面需要来自网站的动态数据来为用户生成输出。

一个简单的解决方案是一个 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-有没有更好的方法来做到这一点。任何改善这一点的建议或解决方案都非常感谢。

4

2 回答 2

2

其他方法是使用 HTTP 处理程序。实现 IHttpHandler 接口并在 Web.config 文件中注册您的实现。稍后使用 jQuery ($.get / $.post) 调用它:

编辑 正如 OP 指出的那样,为了在页面方法中访问会话状态,您应该使用WebMethodAttribute这种方式:

[WebMethod(EnableSession = true)]
于 2012-06-27T07:31:15.083 回答
0

我认为您可以使用 webservice 而不是 aspx 页面来返回 JSON 或 XML 字符串,然后调用方页面(任何 aspx 页面)将在进程成功后响应。

因此,使用此 Web 服务,任何第三方页面都可以访问您的服务器端方法。

要创建 Web 服务,请检查此链接:创建和使用 Asp.net Web 服务基本

问候

于 2012-06-27T07:36:49.070 回答