在我的项目中,有一个带有C#button_Onclick处理程序的asp按钮。问题是当你点击html上的按钮时,事件将由浏览器保存。例如,如果刷新浏览器,将发送事件..
我尝试在button_Onclick处理程序的末尾添加一个return;
,并为要调用的按钮_Onclick处理程序添加一个JavaScript,但都失败了。
ASP:
<asp:Button ID="btnSubmit" runat="server" Text="Save" />
C#:
protected void btnSubmit_Click(object sender, EventArgs e)
{
.......
return;
}
答案 0 :(得分:0)
假设您的代码在单击按钮时发出POST请求,这就是浏览器的行为方式,并且应该在刷新时执行操作。他们必须将提交的数据再次发送到服务器。如果你想避免这种情况,那么在你的提交处理程序方法中,你应该在执行你的处理程序之后重定向到另一个URL。
例如,如果form.asp
显示您的表单,那么在您的处理程序中,您可以重定向到form.asp?message=thankyou
(注意不同的网址),然后在刷新的情况下,您的表单将不会再由浏览器到服务器。
另外,最好使用303重定向。
答案 1 :(得分:0)
您应该重定向到另一个页面以避免这种情况。但是如果您希望保持解决方法如下。
在pageload_Event中捕获dateTime。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["update"]=Server.UrlEncode(System.DateTime.Now.ToString());
}
}
在Page_PreRender事件中将sessionVariable复制到ViewState变量。您可以参考以下内容以清楚地了解页面生命周期。 &#34; http://www.codeproject.com/Articles/667308/ASP-NET-Page-Life-Cycle-Events&#34;
public void Page_PreRender(object obj, EventArgs e)
{
ViewState["update"] = Session["update"];
}
现在,在click事件的按钮上比较ViewState和session变量。如果两个值相等,则允许进入块。
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (Session["update"].ToString() == ViewState["update"].ToString())
{
try
{
-----------Your Logic
}
finally
{
Session["update"]=Server.UrlEncode(System.DateTime.Now.ToString());
}
}
}