3

我是 ASP/C# 编程的新手:

我有一个asp:button创建如下:

<asp:button
    ID="CreateItem"
    ClientIDMode="Static"
    OnClick="btnSave_Click"
    runat="server"
    Text="SAVE">
</asp:button>

在后面的代码中,我有以下内容:

btnSave_Click(object sender, EventArgs e)
{
    //Code here to create an Item    
}

我注意到,当我单击按钮后刷新页面时,正在调用此函数。为了验证,我运行了调试器并在btnSave_Click函数内部设置了一个断点,并在我刷新页面时验证它确实在函数内部。我究竟做错了什么?

4

2 回答 2

6

单击按钮后在页面刷新时调用它,因为原始按钮单击导致表单被发布。之后刷新页面时,浏览器只是重新发布表单数据,从而再次调用回调函数。

为避免这种情况,您可以简单地输入 url 或在地址栏中突出显示 url,然后按 enter,它会将其视为页面加载。

编辑:不完全明白你在问什么。为避免在用户单击刷新时发生这种情况,您可以按照评论中提到的 Oded 进行操作,并在发布后进行重定向:Post-Redirect-Get with ASP.NET

从链接:

protected void SaveClicked(object sender, EventArgs e)
{
    //save changes to database here

    //Redirect if all went well
    Response.Redirect("~/yourpage.aspx");
}
于 2012-12-26T20:02:21.757 回答
0

您必须使用PRG 模式来避免此问题。当您刷新页面时,您的最后一个请求(get 或 Post)再次重新提交到服务器。

解决方案:在点击事件中,在代码之后使用 Response.Redirect

btnSave_Click(object sender, EventArgs e)
{
    //Code here to create an Item   
    Response.Redirect(@"~\page.aspx"); 
}
于 2012-12-26T20:20:22.517 回答