Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 附加到DropDownList的RequiredFieldValidator在使用jquery附加选项后不会激发_C#_Jquery_Asp.net_Validation - Fatal编程技术网

C# 附加到DropDownList的RequiredFieldValidator在使用jquery附加选项后不会激发

C# 附加到DropDownList的RequiredFieldValidator在使用jquery附加选项后不会激发,c#,jquery,asp.net,validation,C#,Jquery,Asp.net,Validation,我正在用C构建一个ASP.NET页面。页面上有两个DropDownList,它们都有一个必需的字段验证器。第一个ddl是从codebehind绑定的。第二个ddl使用基于第一个ddl中所选内容的对WebMethod的jquery ajax调用填充 如果我提交表单时没有在ddl中选择任何值,那么验证程序将按预期启动。但是,当我在第一个ddl中选择一个值,然后在第二个ddl中选择一个值并提交表单时,Page.IsValid属性为false。如果我检查Page对象中的validators集合并查看绑定

我正在用C构建一个ASP.NET页面。页面上有两个DropDownList,它们都有一个必需的字段验证器。第一个ddl是从codebehind绑定的。第二个ddl使用基于第一个ddl中所选内容的对WebMethod的jquery ajax调用填充

如果我提交表单时没有在ddl中选择任何值,那么验证程序将按预期启动。但是,当我在第一个ddl中选择一个值,然后在第二个ddl中选择一个值并提交表单时,Page.IsValid属性为false。如果我检查Page对象中的validators集合并查看绑定到第二个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;
}

有人有什么想法吗?谢谢你的建议,但我需要避免任何回发。我的解决方案中没有回发。AutoPostBack=False。事件函数将为ASP.NET提供服务器端DDL国家的真实状态。因为客户端发生了什么,ASP.NET不知道。如果在Javascript中,我在asp:DropDownList中添加了很多选项,那么这些选项将不会出现在服务器端的DropDownList.items中。