在ASP.NET网页中很脏

时间:2011-05-09 19:01:00

标签: c# asp.net

  

可能重复:
  Detecting Unsaved Changes using JavaScript

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

环境: Asp.net VS2008 C#

3 个答案:

答案 0 :(得分:5)

这可以通过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()事件,但它们不太可靠,因为用户可以例如在某些输入字段中键入abc,然后将其删除,如果使用此技术,表单将被视为脏,但实际上没有更改值。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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