zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决方法
    angular中的:class的使用
    Vue中的:class的使用
    audio 音乐自动播放,循环播放,隐藏等
    vue放大缩小视图窗口按钮
    js获取显示器、页面等高度 (转)
    在 vue 中添加错误与成功提示的代码段
    在 vue 中添加初始化代码段
    学习react基本语法初始化webpack.pub.config.js
    学习react基本语法初始化webpack.config.js
  • 原文地址:https://www.cnblogs.com/yagzh2000/p/3111840.html
Copyright © 2011-2022 走看看