【问题标题】:onclick function being called when page loads页面加载时调用 onclick 函数
【发布时间】:2012-12-26 19:58:30
【问题描述】:

我是 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 函数中设置了一个断点,并在我刷新页面时验证它确实在函数内部。我做错了什么?

【问题讨论】:

  • 点击按钮后是否刷新?
  • @Oded 是的。我正要编辑到我的帖子中
  • 这就是原因。浏览器正在尝试重新创建相同的请求,因此服务器将其理解为触发按钮单击的请求。您需要转到地址栏并按 Enter 以发出新请求。
  • 这是在页面第一次加载时发生,还是仅在按下刷新时发生?
  • 不能在浏览器上完成。处理此问题的正常方法是PRG pattern(用户发帖,服务器重定向(处理后)到浏览器然后获取的不同页面)t

标签: c# asp.net onclick


【解决方案1】:

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

为避免这种情况,您只需输入 url 或在地址栏中突出显示 url 并按 enter,它会将其视为页面加载。

编辑:没有完全理解你在问什么。为避免在用户单击刷新时发生这种情况,您可以按照 cmets 中提到的 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");
}

【讨论】:

  • 有没有办法防止这种情况发生?
【解决方案2】:

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

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

btnSave_Click(object sender, EventArgs e)
{
    //Code here to create an Item   
    Response.Redirect(@"~\page.aspx"); 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    相关资源
    最近更新 更多