在我的ascx控件中,我有一个按钮,我在其中调用一个事件处理程序,并从该事件处理程序中调用一个在演示者中的方法
在ascx页面上
public event EventHandler<EventArgs> Add;
protected void btnAdd_Click(object sender, EventArgs e)
{
if (Add != null)
Add(sender, e);
}
在演示者
上 AddListView.Add += delegate(object sender, EventArgs e)//AddListView is a Interface
{
Add();
};
当我点击btn添加其工作正常并且记录正在添加,但是当我刷新浏览器页面时,通过F5并再次点击鼠标btnAdd正在着火。我试着用
// Page refresh F5 btn press
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());
}
// Page refresh F5 btn press
protected override object SaveViewState()
{
Session["__ISREFRESH"] = _refreshState;
object[] AllStates = new object[2];
AllStates[0] = base.SaveViewState();
AllStates[1] = !(_refreshState);
return AllStates;
}
然后它的工作正常,但刷新后我无法再点击btnAdd,点击btnAdd,再次刷新然后工作正常..
我在其他控件上调用此控件,并且在点击项目页面时我有一个Datalist将再次回发。
如何停止自动按钮点击F5或页面刷新而不点击btnAdd。
请有人帮帮我..
答案 0 :(得分:1)
检查此链接检测浏览器刷新避免在ASP.NET中触发事件。 see here
希望这有帮助。
答案 1 :(得分:0)
有时简单Response.Redirect
就好了。它基本上将初始POST转换为不同的GET请求。只要您保留所有POSTed信息,这就可以工作。否则他们将不再可用。
protected void Button1_Click(object sender, EventArgs e)
{
// we are in Default.aspx here!
Response.Redirect("Default.aspx");
}
这并不总是有效,确实有缺点。而且,这种方式并不太复杂。使用Routing Framework可能会让您获得更顺畅的URL。