2011-06-19 57 views
8

我有一个最初通过jQuery隐藏的窗体,点击一个按钮出现两个单选按钮(最初也是通过jQuery隐藏)。点击一个单选按钮,用户被重定向到另一个页面(这可以正常工作)。点击另一个单选按钮“表单”通过jQuery再次可见。在PostBack上运行jQuery函数(ASP.NET)

当'表单'中的字段在提交时验证了服务器端,并且页面重新加载了可见的验证错误消息,但'表单'现在隐藏了(按照下面的初始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> 

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); 
     } 

回答

3

我建议把所有你在一个函数中所示的JavaScript代码在这个例子的目的,可以说你的地方它在一个函数中调用

myFunction(); 

然后,在你的代码隐藏中,把它放在一个页面的前夕nts(我会推荐page_load)

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

这将注入JavaScript的页面,将运行你的函数只有当页面是回发。

+0

Moar嗨。我将代码隐藏添加到page_load事件中,并将JavaScript放入一个像你说的那样的函数中,但它仍然不起作用。在查看您发布的代码后,查看 – Dan

+0

@Dan上新添加的JavaScript我找不到标题为“openForms”的函数我错过了什么? – MoarCodePlz

+0

对不起,我在inbetween尝试不同的东西,应该已经恢复,函数openforms只是IsPostBack函数的另一个名称,我有太多叫做IsPostBack的东西,它让我感到困惑(认为我有一个var,函数名称,然后立即在c#中调用它)。我很抱歉。我只是不确定语法以及如何告诉用JavaScript打开的元素。 – Dan

1

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

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

如果您不使用UpdatePanels,我会说你只需要在回发(form.visible)期间在服务器端显示窗体。

asp.net webforms模型是非常有用的,但它绝对不是用jQuery的想法。在我看来,如果你想最大限度地利用Web 2.0类型的方法,你可能想考虑避免使用回传/更新面板和更多的使用Web服务,等等......就个人而言,这绝对是拉我无情地走向MVC。

5

这听起来可能有点讨厌,但要做到这一点

我会用隐藏值,当您打开表单更新隐藏价值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做一个完全基于客户端一个,因此省去了回传