使用 JavaScript 调用 ASP.NET 服务器端事件
如何使用 JavaScript 调用 ASP.NET 服务器端事件。
引言
我们经常希望使用 JavaScript 执行 ASP.NET 服务器端事件。例如,在 TextBox
控件的 OnChange
JavaScript 事件上调用 TextChanged
事件。实际上,这可以相当容易地实现。
背景
在我们的一个 ASP.NET Web Forms 中,它是我们现有应用程序的一部分,我试图实现并在点击 ImageButton
控件时打开一个 AJAX Modal Popup Extender 对话框。但是,表单中有一个文本框,其中绑定了一个 OnPropertyChange
事件的 JavaScript 属性。该文本框实际上是一个日期选择器控件。如果用户选择一个日期,则会触发某些业务逻辑。但正因为如此,模态弹出控件在这个表单上始终无法正常工作。因为每当点击 ImageButton
以打开模态对话框时,都会触发 OnPropertyChange
事件并调用 form.submit
方法,从而阻止了模态对话框的打开。因此,情况是,我需要避免 form.submit
方法,同时要记住业务逻辑保持不变。
使用代码
为了克服这种情况,我使用了以下代码
- 我使用了
Page
对象的GetPostbackEventReference
方法来注册 ASP.NET 服务器控件,该控件可以使用客户端回调创建回发。 - 然后,我使用了
__dPostBack
事件来触发日期选择器控件 (txt_sssn_dt
) 的TextChanged
事件。这段代码放置在日期选择器的 JavaScript 函数内部,并且每次用户从日期选择器中选择日期时都会触发。 - 编写一个简单的 JavaScript 函数来处理用户只想直接将日期输入到日期选择器 (
txt_sssn_dt
) 中的情况也是必要的。我为此编写了一个名为DoPostBack()
的 JavaScript 函数。 - 我在日期选择器控件的
OnChange
事件上调用了这个函数。并且,我得到了解决方案。
Page.GetPostBackEventReference(txt_sssn_dt);
__doPostBack("txt_sssn_dt", "TextChanged");
function DoPostBack()
{
__doPostBack("txt_sssn_dt", "TextChanged");
}
if(!IsPostback)
{
/...Implementation.../
/.................../
txt_sssn_dt.Attributes.Add("OnChange",
"javascript:return DoPostBack()")
}
这是一个非常简单的演示,展示了如何从客户端调用服务器端的 ASP.NET 事件。如果您有任何其他或更好的方法,请分享您的想法。我的邮箱是 sanjaysantra@hotmail.com。