ASP.NET在单击asp:button时进行后台提交

3
我正在使用ASP.NET中的AJAX,并尝试处理一个情况,即asp:button触发javascript方法和codebehind c#方法。为此,我正在使用按钮的onclick和onClientClick属性。我需要进行postback以调用codebehind,但是这会导致javascript不起作用,因为变量已经失去状态。有人能描述如何处理吗?可能使用ajax和异步postbacks?这开始让我有点疯狂!
编辑: 实际上,javascript是用于Google地图(v3),而c#代码是用于提交到SQL数据库。
地图在code-behind中初始化:
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在按钮点击时进行PostBack,第二个面板不进行PostBack,并且按钮仍然调用CodeBehind,那么它应该可以工作。到目前为止,我还没有成功同时实现这一点。


你是否只是想在执行OnClick(服务器端)代码之前运行OnClientClick(客户端)代码? - Brissles
你尝试过使用 (IsPostBack) 或 (!IsPostBack) 吗? - COLD TOLD
好的,我在上面添加了一些代码并进行了进一步解释...我正在使用!IsPostBack,但可能使用不正确?@Brissels:基本上我只想调用我的codebehind,以便将数据提交到db中,但是又不会同时破坏javascript谷歌地图。 - SHeinema
1个回答

8
如果你只是想在OnClientClick(客户端)代码执行之前运行OnClick(服务器端)代码,请尝试以下方法:
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
嘿,谢谢。实际上我只是想调用我的codebehind,以便将数据提交到数据库,但在此过程中不破坏javascript谷歌地图。我想我的更新面板正在工作,我只是仍然在我的onclientclick中添加了一个"return false;"来尝试修复另一个问题。您的回复引起了我的注意,所以对于您来说这是一个绿色的勾号!谢谢大家! - SHeinema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接