zoukankan      html  css  js  c++  java
  • ASP.NET中IsPostBack的理解

    这个属性相信大家一定经常用吧 ,判断是否为回发 (切记这是判断是否回发 ,而听到很多人说这是判断是否第一次加载页面 ,还有的说是否为刷新 )很多人说做项目时pageload事件里都要加上,例如下面的代码:

    protected void Page_Load(Object sender,EventArgs e)

    {

         if(!IsPostBack)

          {

               //执行页面首次请求时需要进行的操作;

            }

    }

     

     

    但是确不太理解根本原,说加上这个肯定没错 ,然而不知根本终会出错。 所以 一定要理解原理~~

    为了把这个说清楚 ,这里不用asp.net页面 用html+handler 一般处理程序来讲清这个属性。如下:

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>关于IsPostBack的理解</title>
    </head>
    <body>
    <form action="Hello.ashx" method="post">
        <input type ="hiddle" name="isPostBack" class="haddile" name="isPostBack" value="true"/>
    <label>姓名:</label>
    <input type="text" id="txtUserName" name="txtUserName" value ="{userName}"/>
    <label>年龄:</label>
    <input type="text" id="txtUserAge" name="txtUserAge" value ="{userAge}" />
    <input type="submint" value="提交" />
    <label>{ErrorMsg}</label>
    </form>
    </body>
     
    相关HttpHandler代码如下:
    publci void ProcessRequset(HttpContext context)
    {
    context.Response.ContextType = "text/html";
    string userName = context.Request["txtUserName"];
    string userAge = context.Request["txtUserAge"];
    string msg = string.Empty;
    string isPostBack = context.Request["isPostBack"];
    if(isPostBack == "true")//如果提交了该参数则说明是回发提交表单进行请求页面
    {
    context.Response.Write("表单提交回发请求页面");
    msg = userName +"你好!";
    }
    else
    {
    context.Response.Write("首次请求页面");
    userName = string.Empty;
    mag = string.Empty;
    userAge = string.Empty;
    }
    string fulPath = context.Server.MapPath("Hello.html");//得到文件全路径
    string content = System.IO.File.ReadAllText(fullPath);//读取文件内容
    content =content.Replace("{txtUserName}",userName);
    content = content.Replace("{txtUserAge}",userAge);
    content = content.Replace("{ErrorMsg}".msg,);
    context.Response.Write(content);
    }
    public bool IsReusable
    {
    get{ return false;}
    }

     阅读代码相信大家一看就知道怎么回事儿,这里简要说下

    运行HttpHandler因为第一次运行context.Request["isPostBack"]获取传进来的参数肯定是为null,所以会直接进入页面读取html,把首次请求处理的数据输出到html页面上。

    (占位符{txtUserName})为了实现保存页面状态哦。

    这时在html页面输入姓名和年龄点击提交时(包括以后提交)

     <input type="hidden" name="ispostback" class="night" value="true" />

    isPostBack的Value一直是True,所以context.Request["isPostBack"]获取参数的值为“true”;这就造成了很多人说isPostBack是判断是否为第一次请求页面,其实当你进入页面后进行刷新操作时,依然会发现isPostBack不为True,原因是你并没有进行提交是想一次回发操作。

    举个生活的实例吧

    假如你去餐馆吃饭,那么餐馆就是相当于服务器,你就是客户端,那么餐馆服务员提交给你的菜单(相当于是网页首次打开,进行首次请求),然后你从菜单上点菜后将菜单返回给餐馆服务员(这个过程相当于是进行isPsotBack回发请求)。餐馆根据你的菜单做出你需要的才,上到你餐桌上(进行isPostBack后服务器返回给你的页面)。

     其中的原理是就是这样,如各位有更好的理解说明,不妨贴出来分享下!!!

  • 相关阅读:
    Linux中使用expect脚本实现远程机器自动登录_linux shell
    Linux: ssh命令 远程登录
    总结:PgSql备份pg_dump与还原pg_restore
    停电后,在UPS电源下服务器自动关机脚本
    总结:修改相关postgres用户密码
    问题解决:psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
    delphi 播放mp3
    delphi 获取文件路径函数
    Delphi XE2 使用dbExpress连接MySQL数据库
    kbmmemsql 查询
  • 原文地址:https://www.cnblogs.com/andyWqh520/p/4041794.html
Copyright © 2011-2022 走看看