3. 什么叫postback

当我们直接从服务端读取网页时,表时此网页并没有post(提交),当用户再次提交表单时,就会把此网页的相关参数传给服务器处理,对于服务器来说就是一个postback(提交返回),即提交回来了。这就是postback.

在网页开发时这个很重要,用户第一次加载时就不是postback,当用户把相同的网页提交给服务端时就是postback.

我们建立如下测试程序,先建一个模板,即一个带form的表单,它里面放上一个textbox和一个submit按钮。当点击按钮时会把textbox的值传给服务端的程序来处理,服务端根据是第一次加载还是再次提交返回给用户,当然服务端会把此模板返回回来。

注意模块是不直显示的,即我们在网页打开时是直接打开这个处理程序的网址,它会加载模板,然后会根据模板中返回的信息再提交给客户端,好像同一个页面一样。

   1.模板

<!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>
<form action="HandlerHello1.ashx" method="post">
  <body>
    <input type="hidden" name="ispostback" value="true" />
    姓名:<input type="text" name="UserName" value="@value" />
    <br />
    <input type="submit" name="vvv" value="提交" />
    <br />
    @msg
  </body>
</form>
</html>

为什么用到hidden元素,就是为了表明是不是postback,只有带name属性的元素才能提交给服务端。当第一次加载时不会提交这些元素,因为是直接从HandlerHello1.ashx加载的,此时hidden的value是不存在的。当用户提交时会会传递这个值 ,这时服务端会知道是postback.
2.建立服务端

<%@ WebHandler Language="C#" Class="HandlerHello1" %>

using System;
using System.Web;

public class HandlerHello1 : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/html";
        string postback = context.Request["ispostback"];
        string username=context.Request["UserName"];
        
        string msg="";
        if(postback=="true") 
        {
            context.Response.Write("提交进入");
            msg="欢迎:"+username;
        }else
        {
            context.Response.Write("直接进入");
            username = "";
            @msg="";
        }
        string s=context.Request["vvv"];
        if (!string.IsNullOrEmpty(s))
        {
            @msg=s;
        }
        //读取hello1.html
        string constr = System.IO.File.ReadAllText(context.Server.MapPath("Hello1.htm"));
        constr=constr.Replace("@value", username); //替换文本框中的内容
        constr = constr.Replace("@msg",msg); //替换@msg内容
        context.Response.Write(constr);
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

  替换过的内容好像是用户的网页没有动过一样。其实是服务端又提交了一份完整的copy.

原文地址:https://www.cnblogs.com/yagzh2000/p/3111840.html