【发布时间】:2011-05-09 19:00:59
【问题描述】:
我的 Web 应用程序有 3 个 Web 表单,我在我的网页中实现了验证。我想在我的 Web 应用程序中实现 isdirty 功能。我想在用户点击退出时在我的网页中弹出一个消息框(其中是一个登录状态控件)如果对表单进行了任何更改。
环境: ASP.NET VS2008 c#
【问题讨论】:
我的 Web 应用程序有 3 个 Web 表单,我在我的网页中实现了验证。我想在我的 Web 应用程序中实现 isdirty 功能。我想在用户点击退出时在我的网页中弹出一个消息框(其中是一个登录状态控件)如果对表单进行了任何更改。
环境: ASP.NET VS2008 c#
【问题讨论】:
这可以通过 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@ 在某个输入字段中,然后将其删除,如果您使用此技术,该表单将被视为脏表单,尽管实际上没有更改任何值。
【讨论】:
当用户试图离开表单/页面时,您可以轻松设置弹出/模式窗口以显示。这是一个简单的纯 javascript 示例,当您尝试离开页面时会显示一条消息。
<body onunload="if (confirm('Save form ?')) { SaveFormMethod(); }">
如果您需要更好的示例,您应该提供更多详细信息并向我们展示您的代码。
【讨论】:
请查看this answer 看看是否有帮助
【讨论】: