【问题标题】:multiple submit buttons won't postback on aspx - only last button多个提交按钮不会在 aspx 上回发 - 只有最后一个按钮
【发布时间】:2012-07-25 20:10:22
【问题描述】:

在我的 aspx 页面上,我有两个 fieldsets,每个都包裹着一个 <asp:Panel DefaultButton="...">,它们有自己的 <input type="submit"> 按钮。这是一个缩写版本...

<div id="content">...</div>
<asp:Panel runat="server" id="formPanel1" DefaultButton="form1SubmitButton"> 
    <fieldset>
        <asp:TextBox runat="server" id="textbox1"/>
        <asp:TextBox runat="server" id="textbox2"/>
        <asp:Button runat="server" id="form1SubmitButton" OnClick="form1SubmitButton_OnClick"/>
    </fieldset>
</asp:Panel>
<asp:Panel runat="server" id="formPanel2" DefaultButton="form2SubmitButton"> 
    <fieldset>
        <asp:TextBox runat="server" id="textbox3"/>
        <asp:TextBox runat="server" id="textbox4"/>
        <asp:Button runat="server" id="form2SubmitButton" OnClick="form2SubmitButton_OnClick"/>
    </fieldset>
</asp:Panel>

只有最后一个提交按钮form2SubmitButton 会回发,其他按钮在点击时什么也不做。 我已经简化了上面的代码,但我应该提一下,包括 Panel 在内的每个表单都保存在一个单独的用户控件中,该控件在 aspx 上注册。

更新:经过更多研究后,我发现由于母版页上另一个字段集上的验证器,提交无法正常工作。该字段集用于登录站点,因此是必需的。想法?

【问题讨论】:

  • 那甚至不应该编译/运行。 ID 在该上下文中必须是唯一的。我怀疑太多被“缩写”了。在任何情况下,一个真正常见的“回发未运行”问题(但回发仍然发生!)是由控制树未正确恢复引起的。另外,“无所事事”是什么意思?是否已发送请求?调用 __dopostback 时是否出错?有更新面板吗?有验证吗?
  • 每个字段集实际上都在单独的用户控件中。所以id相同不应该有任何区别。我会为这个例子改变它。您能否解释一下,或指出正确的方向以了解有关控制树未正确恢复的更多信息?
  • 您可能需要检查以确保您的验证组没有阻止其中一个提交。
  • @pst "Does Nothing" 意味着当我点击提交按钮时,没有任何反应,没有回发,没有 js 错误,什么都没有。不,没有更新面板,我的验证是通过 jquery 插件在客户端进行的,并且工作正常。
  • @bflemi3 现在这……很有趣。任何自定义事件处理程序?任何客户端验证(它是否适用于删除验证)?是否附加了内联“onclick”属性?它在表单元素内吗? (页面上只有一个表单元素吗?)

标签: c# asp.net postback


【解决方案1】:

正如 PCasagrande 提到的,确保您的验证组与默认按钮和所有验证器匹配。专门用于您的日志记录部分。

例子:

<asp:Panel ID="pnlUpdateInfo" runat="server" DefaultButton="btnUpdateInfo">

  <ASP:TEXTBOX id="txtZip" runat="server"></ASP:TEXTBOX>   
  <asp:RequiredFieldValidator id="reqvalZipSignUp" runat="server"
    ControlToValidate="txtZip" ValidationGroup="btnUpdateInfo" />                       

  <asp:Button ID="btnUpdateInfo" runat="server" ValidationGroup="btnUpdateInfo"  />

</asp:Panel>

【讨论】:

  • 我对“验证组匹配默认按钮”感到困惑,你能解释一下吗?
  • 啊,是的,我以为你是这个意思。感谢您详细说明雷米
【解决方案2】:

原来它与 HTML5 约束验证有关。我发现了这一点,因为在 chrome 中,从控制台,我收到了错误 An invalid form control with name='...' is not focusable。这导致我发帖this。我在提交按钮中添加了 html5 属性 formnovalidate="formnovalidate",一切正常(*在 chrome v20.0.1132.57、firefox v14.0.1、IE9 v9.0.8112 中测试)。

所以回顾一下,这就是答案...

<asp:Button runat="server" id="submit1" OnClick="submit1_OnClick" text="Submit" formnovalidate="formnovalidate"/>

【讨论】:

  • 有趣.. 我猜,只对隐藏数据使用隐藏控件 ;-)
猜你喜欢
  • 2011-06-23
  • 2013-04-06
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 1970-01-01
  • 2014-01-31
  • 2020-11-20
相关资源
最近更新 更多