2

編集:

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>
4

3 に答える 3

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);
        }
于 2012-05-14T22:39:12.407 に答える
1

デフォルトで選択されている項目の値は 0 であるため、「Select me」RequiredFieldValidatorではなくInitialValue0に設定します。

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

それとは別に、それはうまくいくはずです。

編集:あなたのコメントは、jQueryを使用してDropDownList選択を修正するCheckBoxを有効にすることを明らかにしました。ユーザーは今何かを選択しているはずです。したがって、実際の要件は、バリデーターをアクティブにする必要がないことです。したがって、最初にすべてのバリデータを無効にします( Enabled="false")。

とにかくクライアント側でチェックボックスのクリックを処理しているので、チェックされている場合はバリデーターを有効にし、チェックされていない場合は無効にすることをお勧めします。(ミニ) Validation-Client-Side API、特にValidatorEnable(val, enable)関数を使用できます。バリデータへの参照のみが必要です。しかし、それはあなたにとって問題ではありません。

于 2012-05-11T20:48:54.923 に答える
0

customValidator を使用し、クライアント側のスクリプトを使用して検証するのが最善の方法だと思います。次に、検証の概要を使用して、エラーまたは要件を表示します

于 2012-05-11T20:48:47.077 に答える