附加到下拉列表的RequiredFieldValidator在使用jquery追加选项后不会触发
本文关键字:选项 追加 jquery 下拉列表 RequiredFieldValidator | 更新日期: 2023-09-27 18:11:17
我正在构建一个ASP。. NET页面。页面上有2个下拉列表,都有一个必需的字段验证器。第一个ddl是从代码隐藏绑定的。第二个ddl根据第一个ddl中选择的内容,使用对WebMethod的jquery ajax调用填充。
如果提交表单时没有在两个ddl中选择任何值,验证器将按预期触发。但是,当我在第一个ddl中选择一个值时,然后在第二个ddl中选择一个值并向Page提交表单。IsValid属性为false。如果我检查Page对象中的验证器集合,并查看绑定到第二个ddl的验证器,它的valid属性为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 && jqXHR.status == 400) {
alert("An error occurred. Please try again.");
//alert(jqXHR.status + " -- " + jqXHR.responseText);
}
}
});
});
谢谢
我的猜测是服务器不知道DropDownList有与它相关的值。他认为他们没有价值,所以不要验证他们。
我认为您必须在服务器代码中对ddlState的选定索引更改事件执行相同的数据绑定。
private void ddlState_SelectedIndexChanged(e as args) : ddlState.SelectedIndexChanged {
// Do your databinding for ddlCountry;
}