【发布时间】:2013-08-22 19:05:30
【问题描述】:
在我的 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();
};
当我单击 btnAdd 时,它的工作正常并且正在添加记录,但是当我刷新浏览器页面时,按 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,单击项目页面将再次回发。
如何在不点击 btnAdd 的情况下停止自动按钮点击 F5 或页面刷新。
请有人帮助我..
【问题讨论】:
-
检查此链接检测浏览器刷新避免在 ASP.NET 中触发事件。 see here希望这会有所帮助。
-
我认为插入记录后最好重定向到同一页面并避免所有这些。
-
但没有完全解决我的问题,我在 datalist 中添加项目,当我点击 datalist 项目时,回发调用问题来了..