现在有一个全局 DoAjax.aspx 页面:
所有的 Ajax 请求都请求该页面:这时: 有一个请求 DoAjax.aspx?Axtion=001&A=1&b=2
DoAjax.aspx 本身不出力 请求,只是将 请求转发给 Ajax001.aspx 核心问题:如何让 Ajax001.aspx 获得 A,B 两个参数??
当 Ajax001.aspx 响应,并返回一段 HTML 脚本之后,DoAjax.aspx 如何获得 这段 HTML,且转发回 请求端??
同样,对于 DoAjax.aspx?Axtion=002&A=1&b=2
DoAjax.aspx 也会将数据 转发给 Ajax002.aspx 并获取响应后,转发回客户端!
所有的 Ajax 请求都请求该页面:这时: 有一个请求 DoAjax.aspx?Axtion=001&A=1&b=2
DoAjax.aspx 本身不出力 请求,只是将 请求转发给 Ajax001.aspx 核心问题:如何让 Ajax001.aspx 获得 A,B 两个参数??
当 Ajax001.aspx 响应,并返回一段 HTML 脚本之后,DoAjax.aspx 如何获得 这段 HTML,且转发回 请求端??
同样,对于 DoAjax.aspx?Axtion=002&A=1&b=2
DoAjax.aspx 也会将数据 转发给 Ajax002.aspx 并获取响应后,转发回客户端!
解决方案 »
- 请问asp.net何时该调用Dispose,释放资源??
- 求一个解决思路或方案
- datagird或者datalist中的按钮事件中如何找到datatable中的数据
- 奇怪的问题!!!
- 为什么在服务器端生成Excel文件后再下载时,总是出现白屏?50分!
- Ajax 到底适不适合做大的项目呢?感觉维护和开发都是一个问题...
- Path.Combine("c:\a", Path.GetFileName(Text1.Value))是什么意思?
- 关于treeview
- 刚刚接触asp.net,一个关于datagrid的简单问题
- treeview的错?还是.net的错?
- “ADODB.StreamClass”的 COM 报错.求大神们.
- WEB.CONFG多数据库连接问题
Responese.End()
你的这种做法:假如 有 100个 Ajax.aspx 子页面,每个页面都有2个参数: 全部需要用 DoAjax.aspx 调度!
——这时,你的做法就要在 DoAjax.aspx 中,捕获 200 个参数,然后转发;
——且调用时的传值方式,可能PSOT,可能 GET;总之要在 DoAjax.aspx 完全不理会 传进来的参数有什么,直接将参数 转发给指定的页面!
——DoAjax.aspx 完全不理会 参数,只是通过 Action 参数,将 请求转发给 其他页面,再有 子页面获取参数,处理请求!——Request[""] ,这个是不可以的:因为我不知道 将来的 新增的子页面 还会有哪些参数!
如果用这种做法,我每添加一个 子页面,我就要改动一下 DoAjax.aspx 的代码!!
——这就有违我的 DoAjax.aspx 只做调度的想法!
protected void Page_Load(object sender, EventArgs e)
{
Dictionary<string, string> listKey = new Dictionary<string, string>();
foreach (string sKey in Request.Form.AllKeys)
if (!listKey.ContainsKey(sKey))
listKey.Add(sKey, Request[sKey]); foreach (string sKey in Request.QueryString.AllKeys)
if (!listKey.ContainsKey(sKey))
listKey.Add(sKey, Request[sKey]);
if (!string.IsNullOrWhiteSpace(Action))
{
string sUrl = string.Format("Test{0}.aspx", Action);
Response.Redirect(sUrl);
}
}——现在就看怎么将 收集到的参数,和 指定的 URL ,发送出去并接收到返回值了!
代码如下: protected string Action
{
get { return (string.Empty + Request["Action"]).Trim(); }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(Action))
{
string sUrl = string.Format("Test{0}.aspx", Action);
Server.Transfer(sUrl, true);
}
}
——这时: Test.aspx?Ation=001 的请求会 转发给 Test001.aspx ——且 提交的表单数据也 会一并 转发给 Test001.aspx
————————————————————————————————————
这所以这样做,是因为:当你 一个页面,用于执行过多的 Ajax,代码会不断的增加,直到现在的 3000-5000 行;
而这时,要维护时,你要在 几百个函数里面跳转查找自己 需要到哪里去修改!!
——而且极有可能出错!!!或者改好了这里,却又 破坏了 另外的代码(而你此时完全不知道)!————————————————————————————————————
换言之:
页面重新转发之后:一个页面的请求被分给了 几十个 子页面,5000行代码 给 平均分掉了;
这时:如果你要修改 其中的一个 Action,你就只用在 几十-几百行代码之间折腾,且不用担心 影响其他逻辑!!!————————————————————————————————————
扩展性:
对于一个 大型的 网站来说:假如 我只要子页面,500个 Ajax 请求,如果分别放置的话:就需要 500个 .aspx 页面——你看着不恶心吗??而如果用到了调度:
我执行请求的部分可以使用反射等形式:
子页面不一定要是 .aspx 文件,也可能是 一个.cs 文件;
(一个类库文件中放500个.cs 文件,
肯定比 一个 网站中放1000个 .aspx 文件(.aspx+.aspx.cs) 看着舒服一些!)甚至用插件的方式 对 Ajax 的功能进行扩展!!——插件的扩展肯定比 修改 5000行代码之后,重新编译要安全很多!!!不是么??
一个小组,分别去写 500个 Ajax子页面,终于写完了;——结果:遇到了 IE 的 Ajax 缓存问题
——这可是Ajax 中的 吐血问题:你是觉得又去 每个页面中,加上 “禁止缓存的头标签”容易:
还是在 调度页 准备返回响应时 这一个地方 加上 “禁止缓存的头标签”容易??工作效率 瞬间 为 500:1 —— 这才是生产力呀!!