【问题标题】:RequiredFieldValidator attached to DropDownList does not fire after appending options with jquery在使用 jquery 附加选项后,附加到 DropDownList 的 RequiredFieldValidator 不会触发
【发布时间】:2014-07-03 21:12:51
【问题描述】:

我正在用 C# 构建一个 ASP.NET 页面。页面上有 2 个下拉列表,都有一个必填字段验证器。第一个 ddl 是从代码隐藏绑定的。第二个 ddl 根据第一个 ddl 中选择的内容填充了对 WebMethod 的 jquery ajax 调用。

如果我提交表单时未在任一 ddl 中选择任何值,验证器将按预期触发。但是,当我在第一个 ddl 中选择一个值然后在第二个 ddl 中选择一个值并提交表单时,Page.IsValid 属性为 false。如果我检查 Page 对象中的验证器集合并查看绑定到第二个 ddl 的验证器,其有效属性为 false。

我不知道还能尝试什么。在第二个 ddl 中选择一个值后,我尝试调用 ValidatorEnable 和 ValidatorValidate 尝试在客户端上重新注册验证器,但它不起作用。

谁能告诉我发生了什么?我该如何解决?我真的很想避免使用回发来填充第二个 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);
                                       }
                                   }
                               });
            });

谢谢

【问题讨论】:

  • 有人有什么想法吗?

标签: c# jquery asp.net validation


【解决方案1】:

我的猜测是服务器不知道 DropDownList 有与之关联的值。他认为它们没有价值,所以不要验证它们。

我认为您必须在服务器代码中对 ddlState 的选定索引更改事件执行相同的数据绑定。

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

【讨论】:

  • 感谢您的建议,但我需要避免任何回发。
  • 我的解决方案中没有回发。自动回邮=“假”。事件函数将为 ASP.NET 提供服务器端 ddlCountry 的真实状态。因为客户端发生了什么,ASP.NET 不知道。如果在 Javascript 中我在
猜你喜欢
  • 2012-07-12
  • 2014-01-19
  • 2015-02-14
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2021-02-22
  • 1970-01-01
相关资源
最近更新 更多