如何防止在单击按钮时回发
本文关键字:按钮 单击 何防止 | 更新日期: 2023-09-27 18:10:16
我有一个代码,在数据库中保存文件。在我的代码后面有这个函数:
protected void AttachFile(object sender, EventArgs e)
{
if (txtFile.HasFile)
{
string filename = Path.GetFileName(txtFile.PostedFile.FileName);
string contentType = txtFile.PostedFile.ContentType;
using (Stream fs = txtFile.PostedFile.InputStream)
{
using (BinaryReader br = new BinaryReader(fs))
{
Random ran = new Random();
byte[] bytes = br.ReadBytes((Int32)fs.Length);
NewRequestService newrequest = new NewRequestService();
string temp_id = "";
temp_id = ran.Next(100000, 999999).ToString();
saveAttachFile(filename, contentType, bytes, temp_id);
hdnAttachID.Value = temp_id;
lblAttach.InnerHtml = msg;
}
}
}
else { lblAttach.InnerHtml = "'"Please browse the file to attach.'""; }
}
这是我的HTML:
<asp:Button ID="btnAttached" runat="server" Text="Attach File" OnClick="AttachFile" />
<asp:FileUpload ID="txtFile" size="46" runat="server" />
只需单击"Attach File"
按钮,它将调用code behind函数并保存用户浏览的文件。它工作得很好,但当我刷新页面时,它再次转到函数,并重复保存过程,以重复记录结束。我怎样才能避免这种情况发生呢?
我试过的有:
- 添加
if (!IsPostBack) {}
条件。 - 添加
onClientClick="return false"
属性在我的按钮。
但这并没有解决问题。
使用此技术来防止刷新后控件事件的双重触发:
-
将此代码添加到
PreRender
事件页后面的代码protected void Page_PreRender(object sender, EventArgs e) { ViewState["CheckRefresh"] = Session["CheckRefresh"]; }
-
在您的
Page_Load
事件中添加这一行。protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Session["CheckRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString()); // rest of your code here ... } }
-
在您的控件事件中,如您的按钮单击或任何其他您希望在页面刷新时防止此事件的控件,请先检查这些条件。
protected void AttachFile(object sender, EventArgs e) { if (Session["CheckRefresh"].ToString() == ViewState["CheckRefresh"].ToString()) { // your code starts here .. if (txtFile.HasFile) { //... } // your code ends here .. Session["CheckRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString()); } }
欢呼
您可以使用Post/Redirect/Get (PRG)模式来克服这个问题。你可以在这里看到一个类似的问题。如果用户在asp.net中按F5或刷新,如何防止数据发送?