Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提交时asp.net中的ScriptManager问题_Asp.net_Scriptmanager - Fatal编程技术网

提交时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) {