Asp.Net - кнопка в повторителе не работает, когда в браузере отключен JavaScript - помогите! - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть кнопка в довольно сложном повторителе, она должна иметь 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: Если вы хотите посмотреть, как выглядит страница / код, и хотите проверить ее - здесь .

1 Ответ

1 голос
/ 27 апреля 2011

Кнопка, для которой требуется JavaScript, имеет тип button, тогда как кнопка, которая не требует (на странице сведений о вашем продукте), типа submit - последняя использует поведение отправки по умолчанию для формы HTML, тогда какпервый требует JavaScript для инициирования отправки, чтобы идентифицировать элемент управления, вызвавший обратную передачу.

Как говорит @Craig, это сделано специально - ASP.NET использует JavaScript для обратных передач в ситуациях, подобных вашей.

Кнопки вашей страницы входа и части вашей корзины также не будут работать без JavaScript, так что это может быть более масштабным, чем вы планировали, если вы действительно хотите предложить сценарий без сценариев.Вы можете использовать несколько HTML-форм (без runat="server") на странице ASP.NET, поэтому вам, возможно, придется пойти по этому пути и разделить каждый продукт на его собственную форму, что позволит вам использовать отправку HTML-форм по умолчанию.

Вероятно, стоит оценить вашу целевую аудиторию, а также быстро прочитать https://stackoverflow.com/questions/121108/how-many-people-disable-javascript

Редактировать: и вот список элементов управления ASP.NET, которые используютклиентский скрипт .

...