【问题标题】:How to validate dropdownlist control inside the gridview如何验证gridview中的下拉列表控件
【发布时间】:2012-05-11 20:45:46
【问题描述】:

编辑:

var dropDownControls = $('#<%=GridView1.ClientID %> select option:selected');
var checkbox = $.......checkbox ..... 
  for(index = 0; index < dropDownControls.length; index++)
  {
      if (checkbox.checked) //my code gets exaclty what checkbox i checked
      {
      if(dropDownControls[index].selectedIndex == 0)
      {
          flag = false;
          break;
      }
      }
  }

上面的代码有效

我的按钮在 gridivew 之外,我正在尝试验证 gridivew 内的下拉列表。

<asp:Button ID="btn" runat="server" Text="Submit" OnClick="btn_Click"  CausesValidation="true"/>


<asp:GridView ID="GVInputMapping" runat="server" AutoGenerateColumns="False" DataKeyNames="Id"
                             EnableModelValidation="True" onrowdatabound="GVInputMapping_RowDataBound">
<Columns>
<asp:BoundField DataField="Name" ControlStyle-Width="250px" HeaderText="Name" SortExpression="Name" />
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox id="checkbox1" runat="server"/>
<asp:DropDownList runat="server" ID="ddldetail">
<asp:ListItem Selected="True" Value="0">Select me</asp:ListItem>
<asp:ListItem Value="1">abc</asp:ListItem>
<asp:ListItem Value="2">GHt</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="requiredDDL" runat="server" 
              ControlToValidate="ddldetail" ErrorMessage="Please select" InitialValue="Select me"  Display="Dynamic"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

【问题讨论】:

    标签: asp.net


    【解决方案1】:
    credit goes to ahaliav fox
    
    http://stackoverflow.com/questions/10566599/how-to-control-asp-net-validator-controls-client-side-validation
    
    
     gridview:
    
        <asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" DataKeyNames="Id"  OnRowDataBound="gv_RowDataBound">
                <Columns>
                    <asp:BoundField DataField="ID" ControlStyle-Width="250px" HeaderText="ID" SortExpression="ID" />
                    <asp:BoundField DataField="FirstName" ControlStyle-Width="250px" HeaderText="FirstName"
                        SortExpression="FirstName" />
                    <asp:BoundField DataField="LastName" ControlStyle-Width="250px" HeaderText="LastName"
                        SortExpression="LastName" />
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="checkbox1" runat="server" />
                            <asp:DropDownList ID="drpPaymentMethod" runat="server">
                                        <asp:ListItem Value="-1">----</asp:ListItem>
                                        <asp:ListItem Value="0">Month</asp:ListItem>
                                        <asp:ListItem Value="1">At End</asp:ListItem>
                                        <asp:ListItem Value="2">At Travel</asp:ListItem>
                                    </asp:DropDownList>
                            <asp:RequiredFieldValidator ID="rfv" InitialValue="-1" ControlToValidate="drpPaymentMethod" Enabled="false" Display="Static" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
    
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Value">
                        <ItemTemplate>
                            <asp:TextBox ID="txt_Value" runat="server" Width="58px" Text="0"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
    
    CS:
    
        protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox checkbox1 = e.Row.FindControl("checkbox1") as CheckBox;
                    RequiredFieldValidator rfv = e.Row.FindControl("rfv") as RequiredFieldValidator;
                    DropDownList drpPaymentMethod = (DropDownList)e.Row.FindControl("drpPaymentMethod");
                    // you can just pass "this" instead of "myDiv.ClientID" and get the ID from the DOM element
                    checkbox1.Attributes.Add("onclick", "UpdateValidator('" + checkbox1.ClientID + "','" + drpPaymentMethod.ClientID + "','" + rfv.ClientID + "');");
                    if (!checkbox1.Checked)
                        drpPaymentMethod.Attributes.Add("disabled", "disabled");
                }
            }
    
    javascript:
    
        function UpdateValidator(chkID, drpID, validatorid) {
                //enabling the validator only if the checkbox is checked
                var enableValidator = $("#" + chkID).is(":checked");
    
                if (enableValidator)
                    $('#' + drpID).removeAttr('disabled');
                else
                    $('#' + drpID).attr('disabled', 'disabled');
    
                var vv = $('#' + validatorid).val();
    
                ValidatorEnable(document.getElementById(validatorid), enableValidator);
            }
    

    【讨论】:

      【解决方案2】:

      RequiredFieldValidatorInitialValue设置为0而不是“选择我”,因为默认选择的项目的值为0 p>

      <asp:ListItem Selected="True" Value="0">Select me</asp:ListItem>
      

      除此之外它应该可以正常工作。

      编辑:您的 cmets 显示您使用 jQuery 来启用修复 DropDownList 选择的 CheckBox。用户现在应该已经选择了一些东西。所以你的要求实际上是验证器不应该处于活动状态。所以最初禁用所有验证器(Enabled="false")。

      由于您正在处理客户端上的复选框单击,我建议如果它被选中则启用验证器,并在它未选中时禁用它。您可以使用 (Mini-)Validation-Client-Side API 尤其是 ValidatorEnable(val, enable) 功能。您只需要对验证器的引用。但这对你来说应该不是问题。

      【讨论】:

      • 蒂姆,我的按钮在 gridview 控件之外,我已经尝试过您的建议,但问题是它验证了所有行而不是仅一行(我选中了复选框)跨度>
      • 你根本没有提到这个要求和 CheckBox。然后,您首先需要在 GridView 的CheckBox-CheckedChanged 或/和RowDataBound 上启用验证器。
      • 对不起,我错过了复选框,我已经更新了我的问题,我仍然不确定验证将如何工作,因为my submit button is outside the gridview
      • @issoa:正如我上面所说的。验证器在被禁用时不会触发。因此,您最初需要将它们全部设置为Enabled="false"。然后您可以在 CheckBox-CheckedChanged 事件中启用它们。或者,如果它依赖于数据库中的值,则从RowDataBound 设置启用/禁用状态。也可以在没有回发的情况下使用 javascript (ValidatorEnable-function) 启用它们。 msdn.microsoft.com/en-us/library/…
      • 我理解您的建议,目前我的复选框已启用,并且当用户选中复选框时使用 jquery 禁用下拉列表我启用了下拉列表,用户可以选择从下拉列表中选择或不选择使用可以单击提交按钮进行验证不想使用服务器端代码,您是否有任何其他建议代码,我将粘贴我所做的 javascript 代码。
      【解决方案3】:

      我认为最好的方法是使用 customValidator 并使用客户端脚本进行验证。然后使用验证摘要来显示错误或要求

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-28
        • 1970-01-01
        相关资源
        最近更新 更多