2013-12-05 1 views
1

У меня есть веб-форма asp.net со статическим содержимым (макет, поля и т. Д.), Которая создает набор (изображений) кнопок в коде позади. У меня есть обязательные поля валидаторы и пользовательские валидаторы на моем статическом контенте. Несмотря на то, что я устанавливаю CausesValidation на свои новые кнопки, при нажатии страницы страница не выводится обратно из-за проблем с проверкой клиента.CausesValidation = False, но проверка на стороне клиента все еще происходит (элементы управления, сгенерированные в коде позади)

Кнопки создаются как часть события нажатия кнопки sepearte (т. Е. Не как часть события загрузки страницы).

Private Sub CreateButtons_Click(sender As Object, e As EventArgs) 
     Dim Btn As New ImageButton() 
     Btn.ID = "Something" 
     Btn.ImageUrl = "/Images/Something.png" 
     Btn.CausesValidation = False 
     AddHandler Btn.Click, AddressOf Btn_Click 
     ControlToAddTo.Controls.Add(Btn) 
    End Sub 

    Private Sub Btn_Click(sender As Object, e As EventArgs) 
     'Do something 
    End Sub 

я мог отключить проверку клиента, чтобы решить эту проблему, но я не хочу потерять эту функциональность, предотвращающую ненужные обращения к серверу для проверки. Я попытался создать кнопки в событии onload на странице, и они работают нормально, поэтому я предполагаю, что это часть жизненного цикла страницы, проверка клиента инициируется после загрузки, но до того, как будут запущены какие-либо события элемента.

Каков наилучший способ получить CausesValidation = false, чтобы на самом деле работать ...?


Редактировать: Пример другого контента Aspx на странице (полей и валидаторов):

Date of Birth: 
    <asp:RequiredFieldValidator ID="RFV_DOB" runat="server" ControlToValidate="DOB" Text=" *" ErrorMessage="Date of Birth is a required field" CssClass="Validation" ValidationGroup="Main" /> 
    <asp:CompareValidator ID="CV_DOB" runat="server" ControlToValidate="DOB" Operator="DataTypeCheck" Type="Date" Text=" *" ErrorMessage="DOB must be enterred in date format" CssClass="Validation" ValidationGroup="Main" /> 
    <asp:TextBox ID="DOB" runat="server" CssClass="ST_I" MaxLength="10" /> 

    Gender: 
    <asp:RequiredFieldValidator ID="RFV_Gender" runat="server" ControlToValidate="Gender" Text=" *" ErrorMessage="Gender is a required field" CssClass="Validation" ValidationGroup="Main" /> 
    <asp:DropDownList ID="Gender" runat="server" CssClass="ST_I"> 
     <asp:ListItem Selected="True" /> 
     <asp:ListItem Text="Female" Value="F" /> 
     <asp:ListItem Text="Male" Value="M" /> 
     <asp:ListItem Text="Transgender" Value="T" /> 
     <asp:ListItem Text="Other" Value="O" /> 
    </asp:DropDownList> 

    <asp:Button ID="Send" runat="server" Text="Send Message" style="margin: 20px;" ValidationGroup="Main" /> 
+0

Вы уверены, что кнопка вызывает подтверждение? Покажите соответствующий aspx, поэтому некоторые валидаторы и элементы управления, которые они проверяют. –

ответ

0

Фигурные его. Я не думаю, что это была проверка клиента, которую я видел. Я смутил бы это, потому что моя сторона сервера onclick не была достигнута. Однако на самом деле проблема заключалась в воссоздании моих динамических элементов управления (например, кнопок изображения) при последующих обратных передачах, в частности здесь, после обратной передачи, инициированной пользователем, нажатием кнопки. Фактически это обходило проверку клиента, но поскольку я не воссоздавал кнопки при обратной передаче, он не знал, что кнопка, вызывающая обратную передачу, была установлена ​​на CausesValidation = false, чтобы активировать проверку сервера. Он не попадал в onclick, потому что, опять же, он не был воссоздан, поэтому не знал, что кнопка, вызывающая обратную передачу, имеет обработчик событий.

Совет дня, всегда воссоздавайте свои динамические элементы управления при обратной передаче!