【问题标题】:Is Dirty in ASP.NET Web Page [duplicate]ASP.NET 网页中是否脏 [重复]
【发布时间】:2011-05-09 19:00:59
【问题描述】:

可能重复:
Detecting Unsaved Changes using JavaScript

我的 Web 应用程序有 3 个 Web 表单,我在我的网页中实现了验证。我想在我的 Web 应用程序中实现 isdirty 功能。我想在用户点击退出时在我的网页中弹出一个消息框(其中是一个登录状态控件)如果对表单进行了任何更改。

环境: ASP.NET VS2008 c#

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    这可以通过 jquery 和onbeforeunload 事件轻松完成。使用.serialize() 函数,您可以在页面加载时计算返回字符串上的表单状态,然后在onbeforeunload 事件中计算。然后比较这两个值,如果它们不同,表格中确实发生了一些变化。

    例子:

    <%@ Page Language="C#" %>
    <!DOCTYPE html>
    <html>
    <head id="Head1" runat="server">
        <title></title>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
        <script type="text/javascript">
            var data = '';
            $(function () {
                data = $('form').serialize();
            });
    
            window.onbeforeunload = function () {
                if ($('form').serialize() !== data) {
                    return 'You have unsaved changes. Are you sure you want to navigate away?';
                }
            };
        </script>
    </head>
    <body>
        <form id="Form1" runat="server">
            <asp:TextBox ID="FirstName" runat="server" />
            <asp:TextBox ID="LastName" runat="server" TextMode="MultiLine" />
            <asp:CheckBox ID="Chk" runat="server" />
            <asp:HyperLink ID="Link" runat="server" Text="Go to Google" NavigateUrl="http://www.google.com" />
        </form>
    </body>
    </html>
    

    其他一些技术(例如在重复问题中提出的为您的问题投票关闭的技术)涉及订阅输入元素的.change() 事件,但它们不太可靠,因为用户可以键入 @ 987654328@ 在某个输入字段中,然后将其删除,如果您使用此技术,该表单将被视为脏表单,尽管实际上没有更改任何值。

    【讨论】:

    • 非常好的和快速的实施。我不确定返回消息“您有未保存的更改”的用途。你确定要离开吗?因为警报框中的消息始终是“您要离开此站点吗?您所做的更改可能不会保存'....有什么方法可以更改此消息?
    • 知道了.. 消息无法更改.. 它由浏览器控制(在 window.onbeforeunload 文档中提到)....感谢这篇文章
    【解决方案2】:

    当用户试图离开表单/页面时,您可以轻松设置弹出/模式窗口以显示。这是一个简单的纯 javascript 示例,当您尝试离开页面时会显示一条消息。

    <body onunload="if (confirm('Save form ?')) { SaveFormMethod(); }">
    

    如果您需要更好的示例,您应该提供更多详细信息并向我们展示您的代码。

    【讨论】:

      【解决方案3】:

      请查看this answer 看看是否有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多