Asp.net 在C中防止页面刷新#
副本 您好,我有一个网站,当用户单击一个按钮并返回页面时,如果用户刷新页面或点击F5,则会再次调用button方法 有人知道防止页面刷新而不将页面再次重定向到同一页面的方法吗 像if(page.isRefresh)之类的东西。。。或者,如果存在任何javascript解决方案,则更好 这被认为是有效的。。。。但当我刷新时,它不会回发,而是在文本框中显示before值Asp.net 在C中防止页面刷新#,asp.net,postback,refresh,Asp.net,Postback,Refresh,副本 您好,我有一个网站,当用户单击一个按钮并返回页面时,如果用户刷新页面或点击F5,则会再次调用button方法 有人知道防止页面刷新而不将页面再次重定向到同一页面的方法吗 像if(page.isRefresh)之类的东西。。。或者,如果存在任何javascript解决方案,则更好 这被认为是有效的。。。。但当我刷新时,它不会回发,而是在文本框中显示before值 您可以测试Page.IsPostBack属性,以查看页面是否响应初始请求,或者是否正在处理回发,例如按钮单击事件。这里有更多的信
您可以测试Page.IsPostBack属性,以查看页面是否响应初始请求,或者是否正在处理回发,例如按钮单击事件。这里有更多的信息: 不幸的是,这并不能解决您的问题,因为当用户单击按钮以及在按钮操作发生后刷新页面时,iPostBack将为真 如果您正在执行诸如对某些数据执行CRUD之类的任务,则可以响应。在完成处理后,将用户重定向回同一页面,并避开此问题。它的另一个好处是重新加载内容(假设您向数据库中添加了一条记录,它现在将显示在页面中…),并防止出现刷新问题行为。唯一需要注意的是,他们仍然通过返回历史来重新提交表单
对于Asp.net来说,回发是一个糟糕的实现选择,并且通常会毁掉我的Webforms平台 感谢您的评论,并为我的错误感到抱歉, 我在以下文件中找到此代码: 这一次是经过测试的;)
这并不能解决问题 首先,将令牌存储在视图状态不是一个好主意,因为它可以被禁用。改用控制状态。尽管如此,HttpModule是一个更好的解决方案 总之,这无论如何都不会奏效。如果打开另一个选项卡/窗口,则会话对于上一个选项卡/窗口无效。因此,制动它。每次首次加载页面时,必须以某种方式存储唯一的值。使用它来确定请求来自何处,然后检查“刷新票证”。正如您可能看到的,一个用户的对象可能会变得相当大,这取决于请求的数量、存储这些信息的位置和时间
恐怕我还没有看到任何解决方案,因为它相当复杂。我尝试了很多方法,最后我查找了触发回发/刷新时发送的表单数据。。。我发现创建的任何VIEWSTATE都有一个键,您可以比较这些键,如
bool IsPageRefresh ;
if (Page.IsPostBack)
{
if (ViewState["postid"].ToString() != Session["postid"].ToString())
IsPageRefresh = true;
}
Session["postid"] = System.Guid.NewGuid().ToString();
ViewState["postid"] = Session["postid"];
我把它放在我的自定义基页上,像一个属性一样重用它
这对刷新不起作用,当你刷新页面时,它会告诉浏览器重复上一个事件,这会多次停止按钮的工作,不管帖子是来自重新加载还是实际的按钮单击。是的,这是有效的。这与我找到的代码相同,但当您单击按钮并单击“刷新”时,它会显示“HI”,而不是新值:P我想我可以接受,我会尝试修改这个。谢谢,但是如果页面指令中禁用了viewstate怎么办?Response.Redirect无法解决这个问题。用户仍然可以使用浏览器中的“后退”按钮返回,并在他们提交表单的位置刷新,它仍然会向数据库发送另一个请求get defined?最好将其用作全局变量,并在pageload方法上使用其余的代码,这样您就可以随时使用IsPageRefresh。
private bool _refreshState;
private bool _isRefresh;
protected override void LoadViewState(object savedState)
{
object[] AllStates = (object[])savedState;
base.LoadViewState(AllStates[0]);
_refreshState = bool.Parse(AllStates[1].ToString());
_isRefresh = _refreshState == bool.Parse(Session["__ISREFRESH"].ToString());
}
protected override object SaveViewState()
{
Session["__ISREFRESH"] = _refreshState;
object[] AllStates = new object[2];
AllStates[0] = base.SaveViewState();
AllStates[1] = !(_refreshState);
return AllStates;
}
protected void btn_Click(object sender, EventArgs e)
{
if (!_isRefresh)
Response.Write(DateTime.Now.Millisecond.ToString());
}
bool IsPageRefresh ;
if (Page.IsPostBack)
{
if (ViewState["postid"].ToString() != Session["postid"].ToString())
IsPageRefresh = true;
}
Session["postid"] = System.Guid.NewGuid().ToString();
ViewState["postid"] = Session["postid"];
public bool IsPageRefresh = false;
protected void Page_Init(object sender, EventArgs e)
{
if (IsPostBack)
{
var rForm = Request.Form;
var vw = rForm["__EVENTVALIDATION"].ToString();
var svw = Session["__EVENTVALIDATION"] ?? "";
if (vw.Equals(svw)) IsPageRefresh = true;
Session["__EVENTVALIDATION"] = vw;
}
}