提交时asp.net中的ScriptManager问题
我有以下代码:提交时asp.net中的ScriptManager问题,asp.net,scriptmanager,Asp.net,Scriptmanager,我有以下代码: <asp:ScriptManager ID="ScriptManager1" runat="server" /> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"> <Triggers> <asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Button ID="btnSave" runat="server" Text="Submit"/>
<asp:Panel ID="pnlMyView" runat="server">
<asp:GridView Control here...
</Panel>
<asp:Panel ID="pnlInfo" runat="server" Visible="False">
<div>
Some information...
</div>
</Panel>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
Update in progress...
</ProgressTemplate>
</asp:UpdateProgress>
<script language="javascript" type="text/javascript">
$(window).load(function() {
$("input:submit[id$='btnSave']").click(function() {
//jQuery code to validate gridview enteries...
})
});
</script>
问题是HTML被重新加载,因此按钮上的事件处理程序丢失
您可以尝试以下代码,确保处理程序保持原位:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div id="root">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSave" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Button ID="btnSave" runat="server" Text="Submit"/>
<asp:Panel ID="pnlMyView" runat="server">
<asp:GridView Control here...
</Panel>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
Update in progress...
</ProgressTemplate>
</asp:UpdateProgress>
</div>
<script language="javascript" type="text/javascript">
$(window).load(function() {
$("input:submit[id$='btnSave']").on("click", ".root", function() {
//jQuery code to validate gridview enteries...
})
});
</script>
这告诉jQuery在名为root的元素上注册一个处理程序,但仅在执行input:submit…
时执行它
由于未删除div,因此即使在替换HTML之后,它仍会检测处理程序
这些类型的事件称为委派事件
。您可以在jQuery文档中阅读更详细的解释:更好地使用按钮控件的OnClientClick
属性:
<asp:Button ID="btnSave" runat="server" Text="Submit" OnClientClick="return validate()" />
function validate(){
//jQuery code to validate gridview enteries...
//if validation isn't succeeded return false, otherwise return true
}
函数验证(){
//验证gridview输入的jQuery代码。。。
//如果验证未成功,则返回false,否则返回true
}
嘿,朋友们,我找到了解决方案。我使用了live
活动,现在一切正常
$("input:submit[id$='btnSave']").live("click", function(event) {
感谢您的回复将btnSave从内容模板中取出,并将触发器保留在内部(就像现在一样),根据我的经验,脚本管理器(客户端对象)在第一次单击btnSave后注册ajax脚本包装部分,然后每次按下它,因为它位于内容模板内部,只有页面进程的这一部分,因此jquery函数在第一次之后无法侦听事件。我做了相同的操作,但仍然遇到问题。我已更改了我的问题,请查看底部的问题。谢谢
$("input:submit[id$='btnSave']").live("click", function(event) {