金相预磨机,平阴聊天室,专利转让
做asp.net开发的对.aspx,.ascx和.ashx都不会陌生。关于它们,网上有很多文章介绍。“纸上得来终觉浅,绝知此事要躬行”,下面自己总结一下做个笔记。
1、.aspx
web窗体设计页面。web窗体页由两部分组成:视觉元素(html、服务器控件和静态文本)和该页的编程逻辑(vs中的设计视图和代码视图可分别看到它们对应得文件)。vs将这两个组成部分分别存储在一个单独的文件中。视觉元素在.aspx 文件中创建。
2、.ascx
asp.net的用户控件,是作为一种封装了特定功能和行为(这两者要被用在web应用程序的各种页面上)的web页面被开发的。一个用户控件包含了html、代码和其他web或者用户控件的组合,并在web服务器上以自己的文件格式保存,其扩展名是*.ascx。asp.net里的缺省配置并不允许web客户端通过url来访问这些文件,但是这个网站的其他页面可以集成这些文件里所包含的功能。
3、.ashx
前面两个都太熟悉了,这个才是要讲的重点。
(1)使用举例
.ashx文件是主要用来写web handler的。使用.ashx 可以让你专注于编程而不用管相关的web技术。我们熟知的.aspx是要做html控件树解析的,.aspx包含的所有html实际上是一个类,所有的html都是类里面的成员,这个过程在.ashx是不需要的。ashx必须包含isreusable属性(这个属性代表是否可复用,通常为true),而如果要在ashx文件用使用session必须实现irequiressessionstate接口.
一个简单的实现修改登录用户密码的示例:
namespace test
{
public class handlertest : ihttphandler, irequiressessionstate
{
public void processrequest(httpcontext context)
{
context.response.clearcontent();
context.response.contenttype = "text/plain";
context.response.cache.setcacheability(httpcacheability.nocache); //无缓存
string action = context.request.params["action"]; //外部请求
if (action == "modifypwd") //用户改密码
{
string oldpwd = context.request.params["pwd"];
//在ashx文件用使用session必须实现irequiressessionstate接口
//session["logeduser"]是登录用户的会话,用户名和密码都是test
if (oldpwd.toupper() != ((context.session["logeduser"]) as customer).password.toupper()) //用户输入的旧密码和当前登录用户的不相同
{
context.response.write("旧密码输入错误!");
}
else
{
context.response.write("旧密码输入正确!");
}
}
context.response.end();
}
public bool isreusable
{
get
{
return true;
}
}
}
}
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>mytest</title>
<script type="text/javascript">
function $(s) { if (document.getelementbyid) { return eval('document.getelementbyid("' + s + '")'); } else { return eval('document.all.' + s); } }
function createxmlhttp() {
var xmlhttp = false;
var arrsignatures = ["msxml2.xmlhttp.5.0", "msxml2.xmlhttp.4.0",
"msxml2.xmlhttp.3.0", "msxml2.xmlhttp",
"microsoft.xmlhttp"];
for (var i = 0; i < arrsignatures.length; i++) {
try {
xmlhttp = new activexobject(arrsignatures[i]);
return xmlhttp;
}
catch (oerror) {
xmlhttp = false; //ignore
}
}
// throw new error("msxml is not installed on your system.");
if (!xmlhttp && typeof xmlhttprequest != 'undefined') {
xmlhttp = new xmlhttprequest();
}
return xmlhttp;
}
var xmlreq = createxmlhttp();
// 发送ajax处理请求(这里简单验证旧密码的有效性)
function validateoldpwd(otxt) {
var url = "/handlertest.ashx?action=modifypwd&pwd=" + escape(otxt.value); //.ashx文件
xmlreq.open("get", url, true);
xmlreq.setrequestheader("if-modified-since", "0");
xmlreq.onreadystatechange = callback;
xmlreq.send(url); // 发送文本
}
function callback() {
if (xmlreq.readystate == 4) {
if (xmlreq.status == 200) {
alert(xmlreq.responsetext); // 接收文本
}
else if (xmlreq.status == 404) {
alert("requested url is not found.");
} else if (xmlreq.status == 403) {
alert("access denied.");
} else
alert("status is " + xmlreq.status);
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input id="txtoldpwd" type="text" onblur="validateoldpwd(this)" />
</div>
</form>
</body>
</html>
b、还是在相同的旧文里,我们知道数据传输的几种方式,其实ashx都可以实现(修改ashx文件里context.response.contenttype 即可),这里不再赘述了。
(2)ashx特别适合于生成动态图片,生成动态文本(纯文本,json,xml,javascript等即可)等。
(3).ashx文件有个缺点:它处理控件的回发事件非常麻烦。处理数据的回发,通常都需要一些.aspx页的功能,只有自己手动处理这些功能(还不如直接建一个aspx文件来处理)。所以,一般使用.ashx输出一些不需要回发处理的项目即可。
4、总结
aspx-->p(page)
ascx-->c(control)
ashx-->h(httphandler)
当浏览器访问web服务器,我们最终接收到的还是html文本。浏览器通过渲染引擎解释这些标签,在屏幕上展现出可见的效果。而asp.net不过就是我们应用的一种平台技术来"变相"解释html的,说白了它就是为了提高生产率,它的技术术语再多,本质上还是html范畴内的东西(如果你不通过那些动态页面技术完全利用html和浏览器(当然包括js)技术来实现动态页面效果,那么你会发现效果有了代码量也相当可观).所以说web开发的底层就是一堆的html标签,无论是asp.net还是jsp都是对html某种方式的包装,是html的产物。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论