• 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.

  • 相关阅读:
    KNN算法--物以类聚,人以群分
    朴素贝叶斯算法原理
    17.Letter Combinations of a Phone Number
    103.Binary Tree Zigzag Level Order Traversal
    65、使用互斥锁唤醒指定线程
    64、线程之间的通信
    63、使用Timer类来实现定时任务
    62、单例模式
    61.volatile关键字
    60、死锁
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/3111840.html
Copyright © 2020-2023  润新知