Javascript 使用ViewState或其他方法直接更新回发数据以清除隐藏字段是否很热?

Javascript 使用ViewState或其他方法直接更新回发数据以清除隐藏字段是否很热?,javascript,c#,jquery,postback,viewstate,Javascript,C#,Jquery,Postback,Viewstate,我有一个隐藏字段,它存储了当在页面上单击按钮时要更新的项目的一些ID。这很好用。但是,如果用户单击“更新”按钮,然后等待重新加载页面,然后使用“浏览器刷新”按钮手动刷新页面,则会重新提交数据并在数据库中创建重复数据 是否有办法清除回发数据中的隐藏字段,以便在用户手动刷新页面时,隐藏字段将为空,并且不会对数据库进行更新 到目前为止,我已经尝试在数据库更新后使用下面的代码手动更新ViewState ViewState["hdnBulkIds"] = ""; 我还尝试从ViewState中排除隐藏字

我有一个隐藏字段,它存储了当在页面上单击按钮时要更新的项目的一些ID。这很好用。但是,如果用户单击“更新”按钮,然后等待重新加载页面,然后使用“浏览器刷新”按钮手动刷新页面,则会重新提交数据并在数据库中创建重复数据

是否有办法清除回发数据中的隐藏字段,以便在用户手动刷新页面时,隐藏字段将为空,并且不会对数据库进行更新

到目前为止,我已经尝试在数据库更新后使用下面的代码手动更新ViewState

ViewState["hdnBulkIds"] = "";
我还尝试从ViewState中排除隐藏字段,并在页面加载时使用jQuery手动清除它

$( document ).ready(function() {
    $('#<%= hdnBulkIds.ClientID %>').val("");
});
在这两种情况下,我似乎无法在手动页面刷新时更新发送到服务器的数据实例,因此隐藏字段将保留原始按钮单击时的原始值


我猜问题可以简化为:是否有一种方法可以直接使用VIEWSTATE或其他方法来更新回发数据来清除隐藏字段?

< P>这是WebFrases的一个大问题,也是你应该考虑跳船到MVC的一个很大的原因。通过webforms可能有一种优雅的方式来处理这个问题,但我不知道有什么

一旦用户提交表单,浏览器就会记住该提交,刷新将重新提交表单。对此您无能为力,您必须通过其他方式检测第二次提交

最好/最真实的解决方案是在获取所有数据后执行重定向,并使用查询参数以页面需要的状态重新构建页面。然后,当用户刷新屏幕时,它将重新提交重定向,而不是表单提交

重定向或类似于这些行的东西是允许您执行重定向的函数。问题是,页面重定向将删除webforms维护的关于页面的所有状态,您必须重建所有状态

您还可以实现某种CSRF令牌样式的系统。生成一个随机数,并将其存储在页面加载时的用户会话中。当用户发回时,以某种方式使该数字无效。这样,如果他们再次发回带有号码的邮件,您可以取消请求

这是一种骇客式的处理方式,据我所知,重定向是一种久经考验的方法

另一个选项是,如果回发编辑了一个值,请检查该值是否重复,或者该值是否已编辑,如果存在重复项,请不要让用户重复提交