Asp.net aspx ashx混搭

Asp.net aspx ashx混搭,asp.net,ajax,vb.net,Asp.net,Ajax,Vb.net,我正在使用AJAX功能(使用VB,而不是C#)重新安装.aspx页面。代码隐藏使用从web服务提取的数据填充页面。该页面有两个面板,它们以这种方式进行填充(当然,使用不同的数据)。在整页刷新时,可能需要填充一个或两个面板。但是填充面板2可能需要很长时间,我需要能够在不刷新面板2的情况下更新面板1。因此需要AJAX(对吗?) 我提出的解决方案仍然使用旧的.aspx页面和.aspx.vb代码,但在混合中引入了一个通用处理程序(.ashx)页面。前两个组件在用户第一次访问或整个页面刷新时完成工作,但是

我正在使用AJAX功能(使用VB,而不是C#)重新安装.aspx页面。代码隐藏使用从web服务提取的数据填充页面。该页面有两个面板,它们以这种方式进行填充(当然,使用不同的数据)。在整页刷新时,可能需要填充一个或两个面板。但是填充面板2可能需要很长时间,我需要能够在不刷新面板2的情况下更新面板1。因此需要AJAX(对吗?)

我提出的解决方案仍然使用旧的.aspx页面和.aspx.vb代码,但在混合中引入了一个通用处理程序(.ashx)页面。前两个组件在用户第一次访问或整个页面刷新时完成工作,但是当调用AJAX时,请求由.ashx页面处理

第一个问题:这是健全的架构吗?我还没有在网上找到一个像我这样的情况。最初,我想通过让codebehind实现IHttpRequest,然后提供“ProcessRequest”和“IsReusable”方法,将.aspx页面变成AJAX处理程序,但我发现我无法将对页面的常规访问与AJAX请求分开,所以我的AJAX处理程序甚至在第一次访问页面时就接管了它。第二个问题:我认为这种方法(使.aspx页面承担AJAX处理程序的双重职责)永远不会起作用,对吗?是否无法判断我们收到的是完整页面请求还是部分页面(AJAX)请求

如果架构很好,那么我需要在.ashx文件中动态生成大量HTML,对吗?如果这是正确的,我应该将HTML发送回客户端,还是应该以某种方式对其进行编码?我听说过JSON加密,但还没有弄明白如何使用它。所以,第三个问题:“context.Response.Write”是将数据发送回客户端的唯一管道吗?如果是这样,我应该发回HTML还是某种JSON编码的对象


提前感谢。

听起来页面需要在UI中添加一些AJAX功能

建议对需要AJAXy刷新的每个web表单元素使用 功能。这将使您不必重构大量代码,并在.ashx上引入大量HTML创建


从长远来看,它将更易于维护,并且需要更短的开发周期。

听起来似乎页面需要在UI中添加一些AJAX功能

建议对需要AJAXy刷新的每个web表单元素使用 功能。这将使您不必重构大量代码,并在.ashx上引入大量HTML创建


从长远来看,它将更易于维护,并且需要更短的开发周期。

我同意@p.campbell和@R0MANARMY的观点。UpdatePanel可能是这里最简单的方法


但是像我一样,如果你不想走这条路,我看你的方法没有任何问题。然而,在后端动态(完全)生成html并不是我个人喜欢的路线(出于维护的原因)。我更喜欢实现一个将设计与数据分开的解决方案

我同意@p.campbell和@R0MANARMY的观点。UpdatePanel可能是这里最简单的方法


但是像我一样,如果你不想走这条路,我看你的方法没有任何问题。然而,在后端动态(完全)生成html并不是我个人喜欢的路线(出于维护的原因)。我更喜欢实现一个将设计与数据分开的解决方案

JSON不是为了这个目的,它是为了传递用轻量级符号序列化的对象,是为了使用ashx、response.Write来流式生成html。你可能想看看


或者,如果只是html,可以使用jquery,最简单的是函数,或者可以使用jquery研究Ajax。由于ashx可以用作任何资源,因此它可以在加载功能中使用

JSON不是为了这个目的,它是为了传递用轻量级符号序列化的对象,是为了使用ashx、response.Write来流式生成html。你可能想看看


或者,如果只是html,可以使用jquery,最简单的是函数,或者可以使用jquery研究Ajax。由于ashx可以用作任何资源,因此它可以在加载功能中使用

正如其他人所指出的,UpdatePanel将是一种更简单的方法,但您需要使用多个更新面板,并将属性设置为
条件
。然后,您可以使用页面上的任何按钮(请参阅)甚至使用java脚本(请参阅&)触发更新面板刷新。在服务器端,您可以决定是什么触发了部分回发,并在不需要的情况下通过绕过某些代码进行相应操作

您也可以使用您的方法—这里的技巧是在ashx中使用捕获页面输出,并将其写回响应中(请参阅此技巧用于捕获用户控件输出的位置)。这种方法的唯一限制是,您只能模拟对页面的GET请求,因此您可能必须更改页面以通过查询字符串接受参数。就个人而言,我建议您创建一个用户控件,该控件通过方法/属性接受参数,并生成必要的输出,然后在页面和ashx中使用该控件(通过动态加载到临时页面中)

编辑:我正在使用jquery来说明如何从网格行视图执行此操作

$(document).ready(function() {
   $("tr.ajax-grid-row").click(function() {
       $("#hidden-field-id").val($(this).find(".row-id").val()); // fill hidden filed
       $("#hidden-button-id").click(); // simulate button click
   });
});
您可以将上面的脚本放在标记中的head元素中——假设您已经用css类“ajax grid row”修饰了每个网格行视图,并且每一行都有用css类“row id”修饰的隐藏字段,以存储行标识符或要传递给该行服务器的值。您还可以使用cell(但随后需要使用innerHTML来获取值)