RequiredFieldValidator, прикрепленный к выпадающему списку, не запускается после добавления параметров с помощью jquery

#c# #jquery #asp.net #validation

#c# #jquery #asp.net #проверка

Вопрос:

Я создаю ASP.NET страница на C #. На странице есть 2 выпадающих списка, в обоих есть средство проверки обязательных полей. Первый ddl привязан из codebehind. Второй ddl заполняется вызовом jquery ajax для веб-метода на основе того, что было выбрано в первом ddl.

Если я отправляю форму без выбора каких-либо значений в любом ddl, средства проверки срабатывают, как и ожидалось. Однако, когда я выбираю значение в первом ddl, затем выбираю значение во втором ddl и отправляю форму на страницу.Свойство isValid равно false. Если я проверю коллекцию валидаторов в объекте Page и просмотрю валидатор, привязанный ко второму ddl, его допустимое свойство равно false.

Я не знаю, что еще попробовать. Я пытался вызвать ValidatorEnable и ValidatorValidate, чтобы попытаться повторно зарегистрировать средство проверки на клиенте после выбора значения во втором ddl, но это не работает.

Кто-нибудь может сказать мне, что происходит? Как мне это исправить? Я действительно хочу избежать использования обратной отправки для заполнения второго ddl. Если у кого-нибудь есть какие-либо идеи, я был бы очень признателен за помощь.

Вот код

 <asp:RequiredFieldValidator runat="server" ControlToValidate="ddlState" Display="Dynamic" ErrorMessage="Required" InitialValue="" ValidationGroup="County" />
<asp:DropDownList ID="ddlState" runat="server" AutoPostBack="false" ValidationGroup="County" />

<asp:RequiredFieldValidator runat="server" ControlToValidate="ddlCounty" Display="Dynamic" ErrorMessage="Required" InitialValue="" ValidationGroup="County" />
<asp:DropDownList ID="ddlCounty" runat="server" AutoPostBack="false" ValidationGroup="County" />

$('#<%=ddlState.ClientID %>').change(function() {
                $('#<%=ddlCounty.ClientID %>').find('option').remove();

                var counties = $.ajax({
                                   type: "POST",
                                   contentType: "application/json; charset=utf-8",
                                   url: "County.aspx/GetCounties",
                                   data: "{'state':'"   $(this).val()   "'}",
                                   dataType: "json",
                                   dataFilter: function (data) { return data; },
                                   success: function(data) {
                                       var d = jQuery.parseJSON(data.d);
                                       $('#<%=ddlCounty.ClientID %>').append('<option value=""> - select - </option>');
                                       $.each(d, function(i, val){    
                                           $('#<%=ddlCounty.ClientID %>').append('<option value="'  val  '">'  val  '</option>');
                                       });
                                   },
                                   error: function (jqXHR, error, errorThrown) {
                                       if (jqXHR.status amp;amp; jqXHR.status == 400) {
                                           alert("An error occurred. Please try again.");
                                           //alert(jqXHR.status   " -- "   jqXHR.responseText);
                                       }
                                   }
                               });
            });
  

Спасибо

Комментарии:

1. У кого-нибудь есть какие-либо идеи?

Ответ №1:

Я предполагаю, что сервер не знает, что выпадающий список имеет связанные с ним значения. Он думает, что у них нет значений, поэтому не проверяет их.

Я думаю, вам пришлось бы выполнить ту же привязку данных в коде сервера для выбранного события изменения индекса ddlState.

 private void ddlState_SelectedIndexChanged(e as args) : ddlState.SelectedIndexChanged {
   // Do your databinding for ddlCountry;
}
  

Комментарии:

1. Спасибо за предложение, но мне нужно избегать любых обратных отправлений.

2. В моем решении нет обратной отправки. AutoPostBack=»False». Функция события выдаст ASP.NET реальное состояние ddlCountry на стороне сервера. Потому что то, что происходит на стороне клиента, ASP.NET не знаю. Если в Javascript я добавлю много <option /> в <select> (asp:выпадающий список), этих параметров не будет в выпадающем списке.items на стороне сервера.