2012-01-16 66 views
3

asp:netでAJAXを使用していて、asp:buttonがjavascriptメソッドとcodebehind C#メソッドの両方を起動する状況を処理しようとしています。これを行うには、ボタンのonclick属性とonClientClick属性を使用しています。コードビハインドを呼び出すためにポストバックが必要ですが、このポストバックは変数が状態を失ったためにJavaScriptが機能しなくなる原因になります。誰もこれを処理する方法を記述することはできますか? AJAXと非同期ポストバックで可能ですか?私は少し夢中になってきた!asp:buttonのASP.NET非同期ポストバック

編集: JavaScriptは実際にはgoogle-map(v3)用ですが、C#コードはSQL DBに送信するためのコードです。

マップはでコードビハインドで初期化されています。私は私が得ることができれば、それが仕事だと思う...

<asp:UpdatePanel runat="server" ID="Form" UpdateMode="Conditional"> 
<ContentTemplate> 

(...form stuff...) 

<asp:Button ID="submitButton" runat="server" Text="Submit" ValidationGroup="NewCallFormSubmit" OnClientClick="calcRoute(); return false;" onclick="submitButton_Click" /> 

</ContentTemplate> 
</UpdatePanel> 

<asp:UpdatePanel runat="server" ID="DisplayUpdatePanel" UpdateMode="Conditional"> 
<ContentTemplate> 

<h1> 
    Pick-Up and Drop-Off Locations 
    </h1> 
    <!-- Map Layout --> 
    <div id="map_canvas" style="width: 500px; height: 500px;"></div>       

</ContentTemplate> 
</asp:UpdatePanel> 

:ここ

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!Page.IsPostBack) { 
      ScriptManager.RegisterStartupScript(this, this.GetType(), "onload", "initialize_map();", true); 
      submitButton.Command += new CommandEventHandler(this.submitButton_Click); 
     } 
    } 

は、関連するコードの一部であります最初のupdatepanelをポストバックに、ポストバックをポストバックに、2番目のパネルをポストバックに、そしてボタンを押してコードビハインドを呼び出します。これまでのところ、この間にすべてのことは同時に起こっていません。

+0

OnClick(サーバー)コードの前にOnClientClick(クライアント)コードを実行するだけですか? – Brissles

+0

あなたは(IsPostBack)か(!IsPostBack)を使ってみましたか? –

+0

あなたのコードのサンプルを入れて –

答えて

8

あなたは、単にあなたのOnClick(サーバー)のコードの前に、あなたのOnClientClick(クライアント)のコードを実行したい場合は、以下試してください。

ASP.NET

<asp:Button ID="btn_mybutton" runat="server" Text="MyButton" OnClientClick="return JSFunction();" OnClick="CFunction"/> 

Javascriptを

<script type="text/javascript"> 
    function JSFunction() { 
     alert('Some JavaScript stuff'); 
     return true; 
    } 
</script> 

C#

protected void CFunction(object sender, EventArgs e) 
{ 
    // Some server code 
} 

JavaScript関数が最初に実行され、サーバーコードが実行される前に返されます。

+1

ちょっと、おかげで実際には私はちょうどコードビハインドによってデータがdbに提出されるように呼び出すが、プロセスではjavascriptのGoogleマップを破壊することはありません。私は私の更新パネルが動作していたと思う、私はちょうど "戻りfalseを持っていた"私のonclientclickに別の修正を試みて追加されました。あなたの応答はそれに私の注意を引いたので、それはあなたのための緑色のチェックマークです!皆さん、ありがとうございました! – SHeinema

関連する問題