2011-06-19 16 views
8

最初はjQueryで非表示になっているフォームがあり、ボタンをクリックすると2つのラジオボタンが表示されます(最初はjQuery経由で非表示になっています)。 1つのラジオボタンをクリックすると、ユーザーは別のページにリダイレクトされます(これは問題ありません)。他のラジオボタンをクリックすると、「フォーム」がjQueryを介して再び表示されます。PostBack(ASP.NET)でjQuery関数を実行

「フォーム」内のフィールドが送信時にサーバー側で検証され、検証エラーメッセージが表示された状態でページが再読み込みされますが、「フォーム」が非表示になりました(下の最初のjQueryに従って) 。

ポストバックでフォームを表示するにはどうすればよいですか? (私はすでに無駄にASPパネルに& AJAXのUpdatePanelを試してみました。)

**この私のjQueryのです:(Moarの提案どおり)**

// 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の実装は、これはまだありません作業、任意のアイデア? :(:

は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を排除完全にクライアントベースのいずれかを実行するためにjQueryのを使用することです。コードビハインドをpage_loadイベントに追加し、あなたが言ったようにJavaScriptを関数に入れましたが、それでも動作しません。 – Dan

+0

@Dan上に新しく追加されたJavaScriptを投稿しました投稿したコードを見た後に "openForms"というタイトルの関数が見つかりませんでした。 – MoarCodePlz

+0

はい、申し訳ありませんが、私はさまざまなことを試みていましたが、戻ってきたはずです。関数openformsはIsPostBack関数の別の名前です。IsPostBackという名前のオブジェクトが多すぎるので混乱していました(var、funct名C#で一度に呼び出す)。謝罪いたします。私はシンタックスと、JavaScriptで要素を開く方法についてはわかりません。 – Dan

1

ポストバックが発生すると、jQuery経由でページに行った変更は失われます。

あなたがUpdatePanelsを使用しているかどうかはわかりませんが、その場合は別の問題があります。 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 
    } 
} 

2番目のオプションは、バックサーバー側のポストを行うことを避けるため、ポストバック

関連する問題