在回发时运行jQuery函数(ASP.NET)

在回发时运行jQuery函数(ASP.NET),jquery,asp.net,postback,Jquery,Asp.net,Postback,我有一个表单,它最初是通过jQuery隐藏的,点击一个按钮就会出现两个单选按钮(最初也是通过jQuery隐藏的)。单击一个单选按钮,用户将被重定向到另一个页面(这很好)。单击另一个单选按钮,通过jQuery再次显示“表单” 当“表单”中的一个字段在提交时在服务器端被验证,页面被重新加载,验证错误消息可见,但“表单”现在被隐藏(根据下面的初始jQuery) 如何使表单在回邮时可见? (我已经尝试过ASP面板和AJAX UpdatePanel,但没有效果。) **这是我的jQuery:** // R

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

当“表单”中的一个字段在提交时在服务器端被验证,页面被重新加载,验证错误消息可见,但“表单”现在被隐藏(根据下面的初始jQuery)

如何使表单在回邮时可见? (我已经尝试过ASP面板和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>

我建议将您显示的所有javascript放在一个函数中

myFunction();
然后,在您的代码隐藏中,将其放在一个页面事件中(我建议您加载页面)


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

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

我不确定您是否正在使用UpdatePanels,但在这种情况下还有其他问题。请阅读以下内容:

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


asp.net webforms模型确实很有用,但它肯定不是在考虑jQuery的情况下设计的。在我看来,如果你想充分利用web 2.0类型的方法,你可能需要考虑放弃使用回发/更新面板,更多地使用web服务等等……就我个人而言,这绝对是在吸引我无情地走向MVC。

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

我会使用隐藏值 比如说,当你打开表单时,将隐藏值更新为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执行完全基于客户端的回发,从而消除回发

Hi Moar。我将代码添加到page_load事件中,并将JavaScript放入如您所说的函数中,但它仍然不起作用。请参阅新添加的JavaScriptabove@Dan看完之后您发布的代码我找不到名为“openForms”的函数我缺少什么吗?是的,对不起,我正在尝试不同的东西,应该已经恢复,openForms函数只是iPostback函数的另一个名称,我有太多的东西称为iPostback,这让我很困惑(我想我有一个var,funct名称,然后立即在c#中调用它)。我很抱歉。我只是不确定语法以及如何告诉JavaScript中打开的元素。接下来的两个步骤是:1)在Chrome开发者工具中打开页面,看看是否有JavaScript错误。2)在Chrome开发者工具中打开您的页面,检查并查看您正在注入的函数($(document).ready(openForms);)是否真的进入了正确包含在脚本标记中的页面。如果您通过了这两个测试,那么请尝试调用openForms();在开发人员工具的控制台中,查看它是否执行了您希望它执行的操作。
if (IsPostBack)
    ClientScriptManager.RegisterClientScriptBlock(this.GetType, "myFunction",
        "openForm("+hiddenFormOpen+")", true);
function openForm (val)
{
    if (val ==1)
    {
        Update form visibility here
    }
}