Asp.当浏览器设置为no javascript - help时,中继器中的按钮不起作用

本文关键字:中继器 不起作用 按钮 help 浏览器 设置 javascript no Asp | 更新日期: 2023-09-27 17:52:59

我有一个按钮在一个相当复杂的中继器,它必须有UseSubmitBehavior="False"或我得到错误:

无效的回发或回调参数。事件验证在配置中启用或在页面中使用<%@ Page EnableEventValidation="true" %>。出于安全目的,此功能验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据是有效且预期的,则使用ClientScriptManager。RegisterForEventValidation方法,以便注册回发或回调数据以进行验证。

所以我一直在使用UseSubmitBehavior="False",但我发现,按钮不提交,如果Javascript在浏览器上被禁用。

有什么建议吗?

这是中继器的所有标记,所讨论的按钮是btnAddToCart:

    <asp:Repeater ID="Repeater1" runat="server">
  <HeaderTemplate>
    <table width="100%">
      <tr><td>
  </HeaderTemplate>
  <FooterTemplate>
      </td></tr>
    </table>
  </FooterTemplate>
  <ItemTemplate>
<div style="border-color:Black;border-style:solid;border-width:thin">
<table width="100%">
  <tr><td colspan="2">
    <div style="border-bottom-width:thin;border-bottom-style:solid;border-bottom-color:gray;background-color:#ffe3a6">
    <table width="100%" >
      <tr>
        <td>
          <p class="header" style="text-align:left;">
            <a href="<%# GetMoreInfoLink((ProductRecord)Container.DataItem) %>" class="productlink">
              <%# ((ProductRecord)Container.DataItem).ItemCode %> : <%# ((ProductRecord)Container.DataItem).Name %>
            </a>
          </p>
        </td>
        <td>
          <p class="header" style="text-align:right;"><%# string.Format("{0:C}", ((ProductRecord)Container.DataItem).Price)%></p>
        </td>
      </tr>
    </table></div>
  </td></tr>
  <tr valign="middle">
    <td style="text-align:center;padding-left: 5px;">
      <a href="<%# GetMoreInfoLink((ProductRecord)Container.DataItem) %>" class="productlink" style="color: #FFFFE2">
        <img src='<%# ((ProductRecord)Container.DataItem).Thumb_link %>' alt="" />
      </a>
      <br />
      <a class="main" href="<%# GetMoreInfoLink((ProductRecord)Container.DataItem) %>">More Info</a>
    </td>
    <td >
      <div align="center">
      <table width="90%"><tr><td style="text-align:center">
        <span style="text-align:justify"><%# ((ProductRecord)Container.DataItem).Short_desc %></span>
      </td></tr></table>
      </div>
    </td>
  </tr>
  <tr>
    <td style="text-align:left">
      <asp:Button ID="editButton" runat="server" Text="Edit"  
        Visible="<%# IsEditButtonVisible() %>"
        PostBackUrl="<%# GetEditButtonLink((ProductRecord)Container.DataItem) %>" CausesValidation="False" />
    </td>
    <td style="text-align:right">
      <table align="right" cellspacing="10px"><tr>
      <td id="Td1" runat="server" visible="<%# !string.IsNullOrEmpty(((ProductRecord)Container.DataItem).Docs_link) %>">
        <a class="main" href="<%# ((ProductRecord)Container.DataItem).Docs_link %>">Documentation</a>
      </td>
      <%-- <td><a href="">Demo</a></td> --%>
      <td>
        <asp:Button ID="btnAddToCart" runat="server" Text="Add to cart" UseSubmitBehavior="False" 
          OnClick="btnAddToCart_Click" 
          CommandArgument='<%# ((ProductRecord)Container.DataItem).Id %>'
        />
      </td>
      </tr></table>
    </td>
  </tr>
</table>
</div>
  </ItemTemplate>
  <SeparatorTemplate>
    </td></tr>
    <tr><td>
  </SeparatorTemplate>
</asp:Repeater>

PS:如果你想看看页面/代码看起来像什么,并想测试它-在这里。

Asp.当浏览器设置为no javascript - help时,中继器中的按钮不起作用

需要JavaScript的按钮类型为button,而不需要(在您的产品详细信息页面上)的按钮类型为submit -后者使用HTML表单的默认提交行为,而前者需要JavaScript启动提交,以便识别引发回发的控件。

正如@Craig所说,这是通过设计- ASP。. NET使用JavaScript进行回发,例如您的情况。

如果没有JavaScript,您的登录页面按钮和购物车的某些部分也将无法工作,因此如果您真的热衷于提供无脚本体验,这可能是比您计划的更大的重新设计。您可以在ASP上使用多个HTML表单(没有runat="server")。. NET页面,所以你可能不得不走这条路,把每个产品分成自己的表单,这样你就可以使用默认的HTML表单提交。

可能值得评估你的目标受众,也可以快速阅读https://stackoverflow.com/questions/121108/how-many-people-disable-javascript

编辑:这是一个ASP的列表。. NET控件使用客户端脚本