在ASP.NET中避免重复提交和弹出提示框是开发Web应用程序时很重要的一部分。下面是一个实例代码,用于防止重复提交表单,并弹出异常提示框。
避免表单重复提交
在ASP.NET中,为了防止表单重复提交,我们可以使用以下两种方式:
1. 禁用页面上提交按钮
在单击按钮时,将其设置为禁用状态。在以前无法恢复之前,可以使其显示Progress GIF图像,以便用户知道正在等待进度。
示例代码:
<!--HTML代码-->
<input type="submit" value="Submit" onclick="this.disabled=true;this.value='Submitting...';__doPostBack('','')" />
// C# 代码
if (!Page.IsPostBack)
{
// 处理提交
}
在这个代码示例中,我们通过在按钮控件上添加禁用属性来禁用按钮的点击行为。按钮单击后的操作将被委托到服务器端的代码。在按钮单击后,将会发生一个__doPostBack()的客户端事件,在该事件中,我们将按钮设置为禁用状态,并将值设置为“提交中...”。在服务器端代码中,我们首先检查页面是否已进行了Postback,如果是,则处理数据并返回页面内容。通过这种方式,可以防止多次提交表单。
2. 在PostBack上禁用提交
这种方法是在Postback事件中实现的。在页面加载后,将每个控件的ViewState转换为一个时间戳。当提交表单时,将会比较新的ViewState和旧的ViewState是否相等。如果ViewState发生了变化,则表明是第一次Postback请求。否则,将防止任何后续Postback的请求。
示例代码:
// C#代码
private string m_OriginalViewState = null;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// 获取ViewState并保存到缓存
m_OriginalViewState = ViewStateToString();
Cache.Insert(GetViewStateKey(), m_OriginalViewState);
}
}
protected override void OnPreRender(EventArgs e)
{
if (m_EnableViewStateTimeStamp)
{
ViewState["__AntiXsrfToken"] = Guid.NewGuid().ToString();
}
base.OnPreRender(e);
}
protected void Button1_Click(object sender, EventArgs e)
{
// 防止重复提交
if (IsOriginalViewState())
{
// 执行表单提交
}
}
// 确定当前ViewState是否与原始ViewState相同
private bool IsOriginalViewState()
{
if (m_OriginalViewState == null)
{
return false;
}
return m_OriginalViewState.Equals(ViewStateToString());
}
// 获取ViewState的时间戳
private string ViewStateToString()
{
StringWriter writerText = new StringWriter();
HtmlTextWriter writerHtml = new HtmlTextWriter(writerText);
// 将ViewState写入HtmlTextWriter
base.Render(writerHtml);
return writerText.ToString();
}
// 获取ViewState的缓存Key
private string GetViewStateKey()
{
HttpRequestRequestType requestType = Request.HttpMethod == "GET" ? HttpRequestRequestType.GET : HttpRequestRequestType.POST;
return string.Format("{0}:{1}", requestType, Request.Url.PathAndQuery);
}
在这个代码示例中,我们首先将ViewState转换为字符串,并将其保存到Cache中。如果用户在第一次提交表单后多次提交,则在IsOriginalViewState方法中阻止所有后续提交请求。方法的返回值将确定是否执行表单提交。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Asp.Net中避免重复提交和弹出提示框的实例代码 - Python技术站