#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 на стороне сервера.