0

我有以下代码:

<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>

脚步:

1.刷新页面或第一次加载页面并单击提交按钮以验证GridView中的条目

2.验证正确完成并将更改保存到数据库。

3.对gridview条目进行一些更改并单击提交按钮

4.验证没有发生并将条目(即错误条目)保存在数据库中。

5.刷新页面,即按 F5 现在一切正常。

如何解决步骤 4 中的问题。

-----------------PS----------------

实际上我有两个面板 pnlMyView 和 pnlInfo。所以在页面加载时我只使 pnlMyView 可见,而其他是不可见的。曾经,如果我移至 pnlInfo 并返回 pnlMyView 并提交,则不会进行任何验证。

谢谢

4

3 回答 3

1

问题是您的 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>

这样做是以不同方式注册处理程序。您需要将 UpdatePanel 包装在带有 class 的 div 中root。然后你像这样注册处理程序:

$("input:submit[id$='btnSave']").on("click", ".root", function() {});

这告诉 jQuery 在名为 root 的元素上注册一个处理程序,但仅在执行时才执行它input:submit...

由于 div 没有被删除,即使在您替换了 HTML 之后,它仍然会检测到处理程序。

这些类型的事件称为delegated events。您可以在 jQuery 文档中阅读更详尽的解释:http: //api.jquery.com/on/

于 2013-05-11T18:36:45.233 回答
0

更好地使用OnClientClickButton控件的属性:

<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
}
于 2013-05-11T19:22:43.220 回答
0

嘿朋友我得到了解决方案。我使用了live事件,现在一切正常。

$("input:submit[id$='btnSave']").live("click", function(event) {

谢谢大家的回复

于 2013-05-15T16:32:38.993 回答