我在asp:net中使用AJAX并试图处理一种情况:asp:按钮同时触发javascript方法和codebehind c#方法。为此,我使用按钮的onclick和onClientClick属性。我需要回调才能调用codebehind但是这个回发会导致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>
...我认为如果我可以让第一个更新面板在按钮点击上回发,第二个面板不回发,并且仍然可以调用代码隐藏按钮。到目前为止,这一切都没有运气同时发生。
答案 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函数,并在执行服务器代码之前返回。