2010-11-20 4 views
0

"wmi_cell_phone"というテキストボックスと "wmi_send_sms"というRadioButtonListを含むフォームがあります。 基本的には、選択したラジオの値が "Y"かどうかを確認するバリデーターを作成する必要があります。この場合、TextBox値が空であるかどうかをチェックします。空の場合は、値を入力するようユーザーに通知する必要があります。asp.netのRadioButtonListとTextBoxの値をチェックするCustomValidatorに問題がある

<asp:TextBox ID="wmi_cell_phone" runat="server" MaxLength="100" Width="200px"></asp:TextBox> 
<asp:RadioButtonList ID="wmi_send_sms" RepeatDirection="Horizontal" runat="server" Width="140px" CssClass="radio"></asp:RadioButtonList> 

とコードビハインド(VB):

<asp:CustomValidator ID="val_wmi_send_sms" runat="server" 
ClientValidationFunction="ValidateSMS" 
Display= "Dynamic" 
ErrorMessage="Please enter a valid phone number."> </asp:CustomValidator> 

<script language="javascript" type="text/javascript">     
function ValidateSMS(Source, args) 
{ 

    var smsRadio = document.getElementsByName('<%= wmi_send_sms.ClientID %>'); 
     var cellphone = document.getElementById('<%= wmi_cell_phone.ClientID %>');  

    for (var x = 0; x < smsRadio.length; x ++) 
    { 
     if (smsRadio[x].checked) 
     { 
      if (smsRadio[x].value == "Y") 
      { 
       if (cellphone.value == "") 
        args.IsValid = false; 
       else 
        args.IsValid = true; 
      } 
     } 
    } 
} 
</script> 

Buは動作するようには思えない

wmi_send_sms.Items(0).Value = "Y" 
wmi_send_sms.Items(1).Value = "N" 

マイバリここ

は私の.aspxコードです..私は間違った方法でRadioButtonListにアクセスしています。

+0

にアクセスすることによって、あなたのバリデータでチェックされている場合はどうなりますか?そして、あなたは確認することができますか js関数をデバッグしましたか?バリデータのマークアップも投稿してください。 –

+0

私はそれが何をすべきかをしていないことを意味する...ユーザーがRadioを "Yes"の値で選択し、TextBoxを空のままにした場合、TextBoxに値を入力するはずであることをユーザーに警告する必要がありますが、何もしません。 – Joe

+0

if js関数が呼び出されますか?開発ツールを使用する:http://www.microsoft.com/downloads/en/details.aspx?FamilyID=95e06cbe-4940-4218-b75d-b8856fced535またはFireBug for Firefox:https://addons.mozilla.org/ en-US/firefox/addon/1843/ –

答えて

1

ValidatorによってClientValidationFunctionが呼び出されると、最初にデバッグする必要があります。

IE用

Validatorは何もあなたがtrueにValidateEmptyTextを設定する必要が選択されていない場合でも動作する必要がある場合。

  • ValidationGroup値は、送信ボタン、バリデーターコントロール、および検証するコントロールの3つの場所すべてで一致しますか?
  • 送信ボタンにCausesValidation = trueが設定されていますか?
  • RadioButtonListにがありますか?CausesValidation = true? "たぶん私は間違った方法で RadioButtonListのにアクセスしています.."
0

うん。生成されたマークアップで

見て、それはこのようなものになります:あなたの<%= wmi_send_sms.ClientID %>タグは、ラジオボタンのリストを囲むテーブルのIDを取得している

<table id="wmi_send_sms" class="radio" style="width:140px;"> 
    <tr> 
    <td> 
     <input id="wmi_send_sms_0" type="radio" name="wmi_send_sms" value="Y" /> 
     <label for="wmi_send_sms_0">Y</label> 
    </td> 
    <td> 
     <input id="wmi_send_sms_1" type="radio" name="wmi_send_sms" value="N" /> 
     <label for="wmi_send_sms_1">N</label> 
    </td> 
    </tr> 
</table> 

個人的には、クライアント側で作業する場合、私はそれを回避する方がはるかに簡単ですRadioButtonListGroupNameプロパティを使用して、2つのRadioButtonコントロールを作成し、相互に関連付けるだけです。

<asp:RadioButton ID="wmi_send_sms_y" runat="server" GroupName="wmi_send_sms" Text="Y" /> 
<asp:RadioButton ID="wmi_send_sms_n" runat="server" GroupName="wmi_send_sms" Text="N" /> 

「Y」一つは `work`していないようです意味は何<%= wmi_send_sms_y.ClientID %>

+0

あなたの入力に感謝Carson63000、ありがとう!残念ながら、私は働いている会社のクライアントのための既存のプロジェクトに取り組んでいます。アプリケーションのデザインを変更することはできません(RadioButtonListからRadioButtonに変更することはできません)。既存のコードにバリデータを追加するだけです。 – Joe

+0

かなり好きです。ちょっとした手間をかけて、RadioButtonList内の個々のボタンのクライアントIDを取得する簡単な方法は見つかりませんでしたが、<%= wmi_send_sms.ClientID%>実際に要素を見つけてそれがチェックされているかどうかを調べる必要があります。jQueryを使うともっと簡単になります。 – Carson63000

+0

また、最初ののIDは、その最後に "_0"を付けたRadioButtonListのClientIDになるとします。つまり、getElementsByName( '<%= wmi_send_sms.ClientID%> _ 0')ですが、これは安全であるか、または決して変化しないことが保証される。 – Carson63000

関連する問題