2011-10-20 5 views
0

を形成する部分にヘッダとして使用されます。これには、エクスパンダパネルバーに似た画像のリンクボタンが含まれています。はasp.netのウェブフォーム内

CollapsiblePanelExtnderは、asp.netコントロール(LinkBut​​ton)をクリックすると展開されるajaxツールキットコントロールで、ユーザーコントロールがPlaceHolderにロードされ、新しいデータセクションが表示されます。 これはすべて正常に動作しますが、現在はリンクボタンをクリックして(期待どおり)セクションを展開することができます。私がしたいのは、divセクション全体(expanderHeaders)をクリックし、セクションを展開するコントロールとして機能させることです。

jQueryを使用してみましたが、パネル拡張を複製するだけでなく、サーバー側のコントロールだけでなく、クライアントイベントを受け入れる際にDIVレイヤーを機能させるように設定できました。しかし、私は、jQueryを使用しているときにユーザーコントロールを読み込むためのサーバーサイドメソッドを呼び出すことができなかった。

リンクボタンがdivレイヤーの全コンテンツにまたがる可能性のある既存のコントロールを設定する方法や、クライアント側のスクリプト/ jQueryを使用してサーバー側のメソッドを呼び出す方法ページ内のユーザーコントロール?ジェームズへ

更新が答える事前に

おかげで

私はこの

jqueryの

$(function() { 
     $("#panel").hide(); 
    }); 
    $(document).ready(function() { 
     $(".slide").click(function() { 
      $("#panel").show("slow"); 
     }); 

    }); 

とASPX

<div> 
    <div id="panel" > 
    <p>stuff here</p> 
    </div> 
    <div class="slide" id="div1" runat="server"> 
     <p class="btn-slide">Expand Panel</p> 
    </div> 
</div> 
のようなものを試してみました

CSSを省略します。

この方法を使用すると、divレイヤーをクリックするたびにポストバックが発生するように見えるので、コードブロックにアクセスすることはありません。

protected void Page_Load (object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      div1.Attributes["onclick"] = ClientScript.GetPostBackEventReference(this, "ClickDiv"); 
     } 

    } 

    protected override void RaisePostBackEvent (IPostBackEventHandler source, string eventArgument) 
    { 
     //call the RaisePostBack event 
     base.RaisePostBackEvent(source, eventArgument); 

     if (eventArgument.ToUpper() == "CLICKDIV") 
     { 

     } 
    } 

ダイスはまだありません。

答えて

0

おそらくjQueryを使ってこれを行うために容易になるだろう:あなたはdiv要素にIDを与えるとrunat="server"を指定することができれば、あなたはこのような何かを行うことができ、

//obviously, adjust this to your needs 
$(document).ready(function(){  
    $(".expanderheaders").click(function(){ 
     $(".detailsectionBorders").hide("slow"); 
    } 
}); 

をそれをサーバー側を行うには:

<div id="div1" runat="server"> 
    Expand Me 
</div> 

コードビハインド:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     div1.Attributes["onclick"] = ClientScript.GetPostBackEventReference(this, "ClickDiv"); 
    } 
} 

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument) 
{ 
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument); 

    if (eventArgument.ToUpper() == "CLICKDIV") 
    { 
     //logic here 
    } 
} 
+0

ジェームズおかげで私の更新されたコメントを参照してください。これは終わりで、私は何か似たように試みたが、イベントを得ることができなかった。 – rlcrews

+0

私は混乱している。 2番目の方法でポストバックが発生した場合、 'RaisePostBackEvent'メソッドでパネルの可視性を切り替えることができませんでしたか? –

+0

しかし、私はjQueryまたはajaxエキスパンダーパネルを使って拡大したパネルの滑らかな効果を失います。最初の試みでは、アップデートパネルにAjaxパネルをラップして、ページのどの部分が更新されるかを制御しました。私はページ全体がポストバックを受け取ることを望んでいません。 jQueryを使ってこの同じアプローチを試してみたのは、更新パネルがクライアント側だったので、呼び出しがサーバーに送られないようにしたときです。 – rlcrews

関連する問題