HTMLpage2.htm页
<!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>
<title></title>
</head>
<body>
<form action="Handler2.ashx">
<input type="hidden" name="ispostback" value="true" />
姓名:<input type="text" name="number" value ="@value" /> <input type="submit" value="提交" />
</form>
</body>
</html>
Handler2.ashx页
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
namespace ASP.NET初级
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler2 : IHttpHandler
{
//当一个请求发过来的时候,就会触发ProcessRequest(HttpContext context)方法
public void ProcessRequest(HttpContext context)
{
//context.Response.ContentType = "text/html";
//Server.MapPath的作用是:返回与web服务器上指定虚拟路径相对应的物理物理文件路径
//string path = context.Server.MapPath("~/HTMLpage2.htm");//取得HTMLpage2.htm文件的全路径。例如:D:\学习资料\ASP.NET20140801\ASP.NET初级\HTMLpage2.html
//string contex = File.ReadAllText(path);//读取文件(也就是加载模板)
//context.Response.Write(contex);//再把读取到的文件内容打印出来
/*
string username =context.Request["UserName"]; //取得提交过来的name值(UserName)
if (string.IsNullOrEmpty(username))//如果username为空
{
context.Response.Write("直接进入");
}
else
{
context.Response.Write("提交进入");
}
*/
//----------------------------------------------------------------------------
context.Response.ContentType = "text/html";
string ispostback = context.Request["ispostback"];
string number = context.Request["number"];//通过表单得到的数据都是string类型
if (ispostback == "true") //如果ispostback有值,那么也就是说HTMLpage2.htm页通过提交传递了一个name="ispostback"的value值
{
//context.Response.Write("提交进入");
int i = Convert.ToInt32(number);
i++;
number = i.ToString();
}
else
{
//context.Response.Write("直接进入");
number = "0";
}
string fullpath = context.Server.MapPath("HTMLPage2.htm");
string con = File.ReadAllText(fullpath);//加载模板
con = con.Replace("@value", number);//将模板中占位符替换为值
context.Response.Write(con); //响应阶段,把读取到并经过处理的文件打印出来。
}
public bool IsReusable
{
get
{
return false;
}
}
}
/*
<1>.Server.MapPath()介绍
Server.MapPath(string path)作用是返回与Web服务器上的指定虚拟路径相对应的物理文件路径。其参数path为Web 服务器的虚拟路径,返回结果是与path相对应的物理文件路径。但有时参数并非为虚拟路径,而是用户自定义的文件名。
Server.MapPath()的全名是System.Web.HttpContext.Current.Server.MapPath()。有时在程序调试时会提示“当前上下文中不存在名称“Server””错误,从而不支持函数Server.MapPath()的使用。尽管引用了命名空间“using System.Web;”也是无济于事,此时就需要使用其全名,或者是当前使用Server.MapPath()函数的类继承自System.Web.UI.Page。
<2>.Server.MapPath()应用
Server.MapPath("") :返回当前页面所在的物理文件路径
Server.MapPath("/") :返回应用程序根目录所在的物理文件路径
Server.MapPath("./") :返回当前页面所在的物理文件路径
Server.MapPath("../"):返回当前页面所在的上一级的物理文件路径
Server.MapPath("~/"):返回应用程序的虚拟目录(路径)
Server.MapPath("~"):返回应用程序的虚拟目录(路径)
3. 说明:对于Server.MapPath()具体返回什么内容,在不同的环境下得到的结果也许并不相同。正如上面的六个Server.MapPath()应用,我在VS2010中测试时,其中第二项、第四项会提示错误“未能映射路径”,但是改变程序所在的位置时,仅第二项会提示错误。故不同的软件、不同的环境对其支持度也不同。
*/
/*
ReadAllText(File, Encoding)
File: 要读取的文件的文件名和路径
Encoding: 可选参数,Encoding类型,可选的编码有:Default;UTF8;UTF7; Unicode ;BigEndianUnicode等等。Default表示系统编码,对于中文操作系统,通常是GB2312
* 一般不需要指定文本文件的编码,ReadAllText会尝试自动检查。
* 但是如果读取的文本文件出现乱码,那么应该考虑明确指定文件编码,例如:string content = FileSys.ReadAllText("c:\data\table.txt", Encoding.Default)
*/
}
实现一个加法计算器的功能(它有两个页面,一个html页面,一个handler页面)
html也作为模板,是不给用户看的。经过处理后的handler页面才是呈现给用户看的
(因为在WebApplication里不能将handler也设为启动项,调试的时候就直接在浏览器中输入http://localhost:32451/Handler1.ashx)就行了
HTMLPage1.htm页
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
function clearVal3() {
document.getElementById("t1").οnchange=function () {
document.getElementById("t3").value = "";
}
}
</script>
</head>
<body οnlοad="clearVal3()">
<form action="Handler1.ashx" method="get">
<input type="hidden" name="ispostback" value="true" />
<input type="text" value="@value1" name="txt1" id="t1"/>+
<input type="text" value="@value2" name="txt2" />=
<input type="text" value="@value3" name="txt3" id="t3"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
Handler1.ashx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ASP.NET初级
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
string ispostback= context.Request["ispostback"];
string path = context.Server.MapPath("HTMLPage1.htm");
string val1 = context.Request["txt1"];
string val2 = context.Request["txt2"];
string val3 = (Convert.ToInt32(val1) + Convert.ToInt32(val2)).ToString();
string readpath = System.IO.File.ReadAllText(path);
if (ispostback == "true") //如果通过提交进入页面的那么text文本框肯定是已经填写值的了。然后获取文本框的值,替换原来的@value1,2,3值就好了
{
readpath = readpath.Replace("@value1", val1);
readpath = readpath.Replace("@value2", val2);
readpath = readpath.Replace("@value3", val3);
}
else //如果直接进入页面,也就是不是通过提交进入的。就将text文本框的值都设为""空值
{
readpath = readpath.Replace("@value1", "");
readpath = readpath.Replace("@value2", "");
readpath = readpath.Replace("@value3", "");
}
context.Response.Write(readpath); //将已经处理的字符串readpath(readpath字符串其实就是html代码) 进行输出,然后浏览器解析这段字符串,将他显示在页面上。
}
public bool IsReusable
{
get
{
return false;
}
}
}
}