0

RequiredFieldValidator の代わりに、RadioButtonList に CustomValidator を使用しているため、Javascript を使用して CSS クラスを割り当てることができます。検証では、少なくとも 1 つの項目が選択されていることを確認します。フォール。コードが機能していません:

JS:

function validateRadioButtonList() {              
            var target = document.getElementById('<%=rbGender.ClientID %>');        
            var radioButtons = target.getElementsByTagName('input');
            var is_valid;
            if (radioButtons[0].checked || radioButtons[1].checked) {
                is_valid = true;
                target.className = "";
            }
            else {
                target.className = "validate";
                is_valid = false;
            }
            args.IsValid = is_valid;
        }

ASPX:

 <asp:RadioButtonList ID="rbGender" runat="server" RepeatDirection="Horizontal" 
  RepeatLayout="Flow" AutoPostBack="false">
  <asp:ListItem>Male&nbsp;&nbsp;</asp:ListItem>
  <asp:ListItem>Female&nbsp;&nbsp;</asp:ListItem>
 </asp:RadioButtonList>
 <asp:CustomValidator ID="CustomValidator3" runat="server" 
  ControlToValidate="rbGender" ClientValidationFunction="validateRadioButtonList"   
  Text="*" ForeColor="Red"> </asp:CustomValidator>

 <asp:Button ID="btnUpdate" runat="server" Text="Update" 
  ValidationGroup="vsGroup" />

生成された HTML:

<div class="">
 <span id="ContentPlaceHolder1_rbGender">
 <input id="ContentPlaceHolder1_rbGender_0" type="radio" 
  name="ctl00$ContentPlaceHolder1$rbGender" value="Male  " />
 <label for="ContentPlaceHolder1_rbGender_0">Male  </label>
 <input id="ContentPlaceHolder1_rbGender_1" type="radio" 
  name="ctl00$ContentPlaceHolder1$rbGender" value="Female  " />
 <label for="ContentPlaceHolder1_rbGender_1">Female  </label>
 </span>
 <span style="float: right; margin-right: 3%">
 <span id="ContentPlaceHolder1_CustomValidator3" style="color:Red;
  visibility:hidden;">*  </span>
 </span>
</div>

しかし、私が含めると

UseSubmitBehavior="False" OnClientClick="validateRadioButtonList()"

ボタンの場合、機能します。私はそうしたくありません。

4

2 に答える 2

0

問題は次のとおりです。

var target = document.getElementById(sender.controltovalidate);

ラジオグループを見つけます。JS の ID は一意であるため、各ラジオには独自の ID が必要です。getElementByIdそのため、単一のオブジェクトを返すだけですべてのラジオ ボタンを選択することはできません。

コントロールによって生成される HTML を表示できますか?

編集

同様に(ただし、コントロール名を変更すると、サーバーによって生成されるため、この名前も変更されます)。あなたがそれにクラスを与えることができれば、それはより良いでしょう.

var target = document.getElementsByName("ctl00$ContentPlaceHolder1$rbGender")
于 2013-08-26T12:27:31.750 に答える
0

ASP バリデータなしで試してみてください。JavaScript を使用するだけで解決できます。このリンクを参照してみてください: http://www.felgall.com/javatip2.htm

于 2013-08-26T13:13:06.227 に答える