什么是ASP.NET中事件回传(PostBack)机制? 请给我一个具体的定义。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是ASP.NET中事件回传(PostBack)机制? 请给我一个具体的定义。相关的知识,希望对你有一定的参考价值。

个人理解的白话文: 回传 就是页面刷新了 。 页面只有通过非本页一个链接打开的时候 是不叫刷新的 否则 在本页面链接本页面 (除ajax等技术) 都会造成回传 postback=true 个人理解 希望对有帮助追问

谢谢,不过好像不是我要的答案。其实这是我一门选修课的结业题目:
什么是ASP.NET中事件回传(PostBack)机制?IsPostBack的作用是什么?
IsPostBack 是Page类有一个bool类型的属性,用来判断针对当前Form的请求是第一次还是非第一次请求。i)当IsPostBack=true时表示非第一次请求,称为PostBack。ii)当IsPostBack=false时表示第一次请求。

追答

oo 在百度查一下 就能查到的...

追问

要是我能查到就不到这儿提问了。。。。。

追答

我给你发过去了 你看下消息

参考技术A 当然选ii)了,页面第一次载入的时候,页面初始化,就是第一次请求,所有的初始化代码都应放在
if(!IsPostBack)这里面执行,一个页面只生成载入一次,以后任何事件引起页面的载入,都是回传,比如一个按钮事件,执行代码,都是回传.net会恢复本页面的状态,追问

什么是ASP.NET中事件回传(PostBack)机制? 请给我一个具体的定义?
还有上面的不是选择题好吧?

参考技术B PostBack直译:回发;也是刷新,不同于跳转,asp有一个叫视图状态的的东西(ViewState),起作用存储页面数据的一些状态,PostBack(回发)后,页面数据还是保存回发之前的状态,如果是跳转则不会保存。

在 PostBack (ASP.NET) 上运行 jQuery 函数

【中文标题】在 PostBack (ASP.NET) 上运行 jQuery 函数【英文标题】:Run jQuery function on PostBack (ASP.NET) 【发布时间】:2011-09-18 05:53:05 【问题描述】:

我有一个最初通过 jQuery 隐藏的表单,单击按钮时会出现两个单选按钮(最初也通过 jQuery 隐藏)。单击一个单选按钮后,用户将被重定向到另一个页面(这很好用)。单击另一个单选按钮时,“表单”通过 jQuery 再次可见。

我的问题是当“表单”中的字段在提交时在服务器端进行验证,并且页面重新加载时验证错误消息可见但“表单”现在已隐藏(根据下面的初始 jQuery)。

如何使表单在​​回发时可见? (我已经尝试过 ASP Panels & AJAX UpdatePanel 无济于事。)

** 这是我的 jQuery:**

// Reveal Radio Fields
      $(".btn-leavecomment, .txt-leavecomment").toggle(function()   
            $("#commenttype").stop().animate( down: "+=300" , 3000)      
            $("#commenttype").stop().slideDown("slow");      
       , function()
            $("#commenttype").stop().animate( down: "-=300" , 1400)      
            $("#commenttype").stop().slideUp("slow");  
      );     


      // Reveal Form on-click of one radio field in particular
      $(".reveal_ccform").toggle(function()   
            $("#ccform_container").stop().animate( down: "+=300" , 4000)      
            $("#ccform_container").stop().slideDown("slow:4000");      
       , function()
            $("#ccform_container").stop().animate( down: "-=300" , 4000)      
            $("#ccform_container").stop().slideUp("slow:4000");
      ); 

新添加的 JavaScript 实现(根据 Moar 的建议)这仍然不起作用,有什么想法吗? :( :

JavaScript:

<script type="text/javascript">
        $(document).ready() 
            function isPostBack() 
            
                if (!document.getElementById('clientSideIsPostBack'))
                
                    return false;

                    if (document.getElementById('clientSideIsPostBack').value == 'Y' )
                    return true;
                    

                // Reveal Comment Type
                $(".btn-leavecomment, .txt-leavecomment").toggle(function () 
                    $("#commenttype").stop().animate( down: "+=300" , 3000)
                    $("#commenttype").stop().slideDown("slow");
                , function () 
                    $("#commenttype").stop().animate( down: "-=300" , 1400)
                    $("#commenttype").stop().slideUp("slow");
                );


                // Reveal Sign Guestbook Form
                $(".reveal_ccform").toggle(function () 
                    $("#ccform_container").stop().animate( down: "+=300" , 4000)
                    $("#ccform_container").stop().slideDown("slow:4000");
                , function () 
                    $("#ccform_container").stop().animate( down: "-=300" , 4000)
                    $("#ccform_container").stop().slideUp("slow:4000");
                );

                // Hide 'Leave a Comment' button and 'Comment Type' div
                $('.reveal_ccform').click(function () 
                    $(".btn-leavecomment").stop().fadeOut("slow:1500"),
                    $('#commenttype').slideUp("slow:8000");
                );
            
        
    </script>

C#:

if (Page.IsPostBack)
        
            Page.ClientScript.RegisterStartupScript(GetType(), "IsPostBack", script, true);

            //Second part of code will run if is postback = true
            ClientScriptManager cs = Page.ClientScript;
            Type csType = this.GetType();
            cs.RegisterClientScriptBlock(csType, "openForms",     "$(document).ready(openForms);", true);
          

【问题讨论】:

【参考方案1】:

这听起来可能很烦人,但要做到这一点

我会使用隐藏值 说当您打开表单时将隐藏值更新为 1,

页面 HTML

input type="hidden" id="hiddenFormOpen" value="1" runat="server"

C# 代码隐藏

if (IsPostBack)
    ClientScriptManager.RegisterClientScriptBlock(this.GetType, "myFunction",
        "openForm("+hiddenFormOpen+")", true);

Javascript 函数

function openForm (val)

    if (val ==1)
    
        Update form visibility here
    

第二个选项是避免进行服务器端回发并使用 JQuery 进行完全基于客户端的回发,从而消除回发

【讨论】:

【参考方案2】:

我建议将您显示的所有 javascript 放在一个函数中。为了这个例子,假设你把它放在一个名为

的函数中
myFunction();

然后,在您的代码隐藏中,将其放在页面事件之一中(我会推荐 page_load)

if (IsPostBack)
    ClientScriptManager.RegisterClientScriptBlock(this.GetType, "myFunction", "$(document).ready(myFunction);", true);

这会将 javascript 注入页面,仅当页面是回发时才会运行您的函数。

【讨论】:

嗨摩尔。我将代码隐藏添加到 page_load 事件中,并将 JavaScript 放入您所说的函数中,但它仍然无法正常工作。见上面新增的 JavaScript @Dan 查看您发布的代码后,我找不到名为“openForms”的函数我错过了什么吗? 是的对不起,我在尝试不同的东西之间,应该恢复,函数 openforms 只是 IsPostBack 函数的另一个名称,我有太多的东西叫做 IsPostBack 它让我感到困惑(想我有一个var,函数名称,然后在 c# 中一次调用它)。我很抱歉。我只是不确定语法以及如何告诉 JavaScript 中打开的元素。 接下来您可以执行以下两个步骤: 1) 在 Chrome 开发人员工具中打开您的页面,查看是否有任何 javascript 错误。 2) 在 Chrome 开发人员工具中打开您的页面并检查您正在注入的函数 ($(document).ready(openForms);) 是否实际上使其进入正确包含在脚本标签中的页面。如果您通过了这两项测试,请尝试调用 openForms();在开发者工具的控制台中,看看它是否符合您的要求。【参考方案3】:

当回发发生时,您通过 jQuery 对页面所做的任何更改都将丢失。

我不确定您是否在使用 UpdatePanel,但在这种情况下还有其他问题。阅读:jQuery $(document).ready and UpdatePanels?

如果您不使用 UpdatePanels,我想说您只需要在回发期间使表单在服务器端可见(form.visible)。

asp.net webforms 模型非常有用,但它绝对不是为 jQuery 设计的。在我看来,如果您想充分利用 web 2.0 类型的方法,您可能需要考虑摆脱使用回发/更新面板,而更多地使用 web 服务等等......就个人而言,这绝对是拉动我对 MVC 无情。

【讨论】:

以上是关于什么是ASP.NET中事件回传(PostBack)机制? 请给我一个具体的定义。的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET页面事件:顺序与回传详解

为啥ASP.net中动态控件在刷新后不能

asp.net页面的生命周期中有一个判断是不是回传 IsPostBack 属性,请问有啥用?

在 PostBack (ASP.NET) 上运行 jQuery 函数

ASP.NET postback with JavaScript

Doing or Raising Postback using __doPostBack() function from Javascript in Asp.Net