首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >aspx ashx混搭

aspx ashx混搭
EN

Stack Overflow用户
提问于 2011-04-07 19:58:15
回答 4查看 872关注 0票数 1

我是复古-用AJAX功能(使用VB,而不是C#)来安装一个AJAX页面。编解码器用从web服务中提取的数据填充页面。该页面有两个面板,它们以这种方式填充(当然,使用不同的数据)。在整页刷新时,可能需要填充一个或两个面板。但是填充Panel 2可能需要很长时间,我需要能够更新面板1而不刷新面板2,因此需要AJAX (对吗?)

我想出的解决方案仍然有带有.aspx.vb代码的旧.aspx.vb页面,但是在混合中引入了一个通用处理程序(.ashx)页面。前两个组件在用户的第一次访问或整个页面刷新时执行任务,但是当AJAX被调用时,请求将由.ashx页面处理。

第一个问题:这是合理的架构吗?我在网上还没有发现像我这样的情况。最初,我想让.aspx页面成为AJAX处理程序,方法是让代码隐藏实现IHttpRequest,然后提供"ProcessRequest“和"IsReusable”方法,但我发现我无法将对页面的常规访问与AJAX请求分开,所以我的AJAX处理程序甚至在第一次访问该页面时就接管了该页面。第二个问题:我认为这种方法(让.aspx页面作为AJAX处理程序执行双重任务)永远不会起作用,这是正确的吗?是否不可能知道我们是收到完整页面请求还是部分页面请求(AJAX)?

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

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-08 05:18:18

正如其他人所指出的,UpdatePanel是一种更容易的方法--但是您需要使用多个更新面板,将UpdateMode属性设置为conditional。然后,您可以使用页面上的任意按钮(参见AsyncPostBackTrigger)或甚至使用java(参见 & )触发更新面板刷新。在服务器端,您可以决定是什么触发了部分回发,如果不需要的话,可以绕过某些代码采取相应的行动。

您还可以使用您的方法--这里的诀窍是使用您的ashx中的HttpServerUtility.Execute捕获页面输出,并将其写回响应(参见这篇文章,其中使用了这个技巧来捕获用户控件输出)。这种方法的唯一限制是只能模拟对页面的GET请求,因此您可能不得不通过查询字符串更改页面以接受参数。就我个人而言,我建议您创建一个用户控件,该控件通过方法/属性接受参数,并生成必要的输出,然后在页面和ashx中使用该控件(通过动态地将其加载到一个喜怒无常的页面-见本文中)。

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

代码语言:javascript
运行
复制
$(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”装饰的隐藏字段,以存储行标识符或要传递给该行的服务器的值。您也可以使用单元格(但随后需要使用innerHTML来获取每行的值)。“隐藏字段-id”和“隐藏-按钮-id”是隐藏字段和提交按钮的客户端id,如果这些是服务器控件,则应该使用Control.ClientID获取实际的控件id。

票数 0
EN

Stack Overflow用户

发布于 2011-04-07 20:07:46

听起来,该页面似乎需要添加到UI中的一些AJAX功能。

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

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

票数 1
EN

Stack Overflow用户

发布于 2011-04-07 20:27:29

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

但就像我一样,如果你不想走UpdatePanel路线,我看不出你的方法有什么问题。但是,在后端动态(完全)生成html并不是我个人喜欢的一种方法(出于维护的原因)。我更希望实现一种将设计与数据分离的解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5586856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档