【问题标题】:ASP.NET asynchronous post-back on asp:button clickASP.NET 在 asp 上的异步回发:按钮单击
【发布时间】:2012-02-11 01:56:03
【问题描述】:

我在 asp:net 中使用 AJAX,并试图处理 asp:button 同时触发 javascript 方法和代码隐藏 c# 方法的情况。为此,我使用按钮的 onclick 和 onClientClick 属性。我需要进行回发才能调用代码隐藏,但是此回发会导致 javascript 无法工作,因为变量已丢失状态。谁能描述如何处理这个? ajax 和异步回发可能吗?它开始让我有点发疯了!

编辑: javascript 实际上是用于 google-map (v3),c# 代码用于提交到 sql db。

地图在代码隐藏中初始化:

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>

...我认为如果我可以让第一个更新面板在按钮单击时回发,第二个面板不回发,并且按钮仍然调用代码隐藏,那么它会起作用。到目前为止,这一切同时发生还没有运气。

【问题讨论】:

  • 您只是想在 OnClick(服务器)代码之前运行 OnClientClick(客户端)代码吗?
  • 您是否尝试过使用 (IsPostBack) 或 (!IsPostBack)
  • 好的,添加了一些代码并在上面进一步解释...我正在使用!IsPostBack,但可能不正确? @Brissels:我基本上只是希望通过代码隐藏被调用,以便将数据提交到数据库,但不会在此过程中破坏 javascript 谷歌地图。

标签: c# asp.net ajax postback asynchronous-postback


【解决方案1】:

如果您只是想在 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 函数首先执行,并在服务器代码执行之前返回。

【讨论】:

  • 嘿,谢谢,实际上我只是希望通过代码隐藏被调用,以便将数据提交到数据库,但不会在此过程中破坏 javascript 谷歌地图。我想我的更新面板正在工作,但我仍然有一个“return false”;从另一个修复尝试添加到我的 onclientclick。不过,您的回复引起了我的注意,所以它对您来说是一个绿色的复选标记!谢谢大家!
猜你喜欢
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-14
  • 2016-04-15
  • 1970-01-01
相关资源
最近更新 更多