【问题标题】:Spot the place that submits the form in ASP .NET发现 ASP .NET 中提交表单的地方
【发布时间】:2010-07-27 13:54:19
【问题描述】:

我在 ASP .NET 页面上有一个表单,按钮 onclick 事件附加到 doPostBack 函数。 但是,当我单击该按钮时,表单会提交两次。服务端调试器进入Page_Load两次,Fiddler记录了两个aspx请求等,没有302重定向等,很简单的页面。

当我在 __doPostBack 函数中设置断点时,它也会被调用一次(也许这只是一种错觉)。

是否有机会更深入地调试客户端以找到问题?

谢谢,帕维尔

【问题讨论】:

    标签: asp.net postback dopostback


    【解决方案1】:

    您是否手动连接事件处理程序?如果是这样,您应该检查 ASPX 的 Page 指令中的 AutoEventWireup="true" 是否。如果是这样,请将其更改为 false 或删除手动接线。当您使用设计器文件将旧页面升级到较新的 Web 应用程序格式时,可能会发生这种情况。

    【讨论】:

    • AutoEventWireup="True",但我为什么要把它改成 false 并去掉手动接线?
    • 使用 AutoEventWireup="True",ASP.NET 将自动连接常见的事件处理程序,例如 Page_Load,因此您无需手动操作(它的存在是为了帮助您避免此类无趣的样板代码)。但是,如果您在代码中执行此操作,则必须设置 AutoEventWireup="false",否则您最终会注册两次事件处理程序,因此也会调用两次。我建议删除手动接线,因为更少的样板代码等于更好的可读性,这很重要。
    • 这是一个关于 AutoEventWireup 的问题,并附有解释其工作原理的答案:stackoverflow.com/questions/680878/…
    • 我之所以问这个问题,是因为它不能解决我的问题,即:从浏览器发送了两个请求:) 两次调用 Page_Load 只是一个暗示。谢谢
    【解决方案2】:

    好的。明白了:input type="image" 有

    onclick="__doPostBack(.....)" 
    

    当我修改为:

    onclick="_doPostBack(...); return false;"
    

    两个请求问题消失了。 Fiddler 只记录了一个请求,Page_Load 被调用一次,一切都很整洁。

    所以在使用会导致点击时自动提交表单的 HTML 元素时要小心;)

    谢谢,帕维尔

    【讨论】:

    • 很高兴你找到了它。同样的事情也发生在我身上。今天我总是避免直接使用 onclick 属性,而是倾向于 jquery 的绑定/单击。通过这种方式,您可以获得一致的编程模型,不会因浏览器而异,并且可以更好地分离标记和 JavaScript 代码。
    【解决方案3】:

    听起来有两件事会导致回发。该按钮是一个提交按钮并且还有一个 onclick 处理程序吗?这会导致这种行为。

    您在 Fiddler 中看到的 2 个 ASPX 请求是相同的,还是略有不同?

    【讨论】:

    • 那些请求包含相同的表单数据等...它的输入,type="image" with onclick="__doPostBack..."。
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    相关资源
    最近更新 更多