3

私はasp:netでAJAXを使用しており、asp:buttonがjavascriptメソッドとcodebehind c#メソッドの両方をトリガーする状況を処理しようとしています。これを行うために、ボタンにonclick属性とonClientClick属性を使用しています。コードビハインドを呼び出すにはポストバックを実行する必要がありますが、変数の状態が失われたため、このポストバックによってjavascriptが機能しなくなります。誰かがこれを処理する方法を説明できますか?ajaxと非同期ポストバックで可能ですか?それは私を少し夢中にさせ始めています!

編集:javascriptは実際にはgoogle-map(v3)用であり、c#コードはsqldbに送信するためのものです。

マップは、コードビハインドで初期化されます。

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

関連するコードの一部を次に示します。

<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>

...ボタンのクリックで最初のupdatepanelをポストバックし、2番目のパネルをポストバックせず、ボタンでコードビハインドを呼び出すことができれば、うまくいくと思います。これまでのところ、これがすべて同時に起こっているという運はありません。

4

1 に答える 1

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 関数が最初に実行され、サーバー コードが実行される前から返されます。

于 2012-01-16T00:58:54.010 に答える