在使用检查asp.net中的RadioButtonList和TextBox值的CustomValidator时遇到问题

时间:2010-11-20 18:12:40

标签: asp.net vb.net textbox radiobuttonlist customvalidator

我有一个包含其中一个名为“wmi_cell_phone”的TextBox和一个RadioButtonList“wmi_send_sms”的表单。 基本上,我需要创建一个验证器来检查所选无线电的值是否为“Y”。如果是这种情况,则检查TextBox值是否为空。如果为空,则应通知用户输入值。

这是我的.aspx代码:

<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):

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

我的验证员

<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它似乎不起作用..也许我正在以错误的方式访问RadioButtonList ..

2 个答案:

答案 0 :(得分:1)

如果Validator调用ClientValidationFunction,则应首先进行调试。

如果即使没有选择任何内容,Validator仍然有效,您必须将ValidateEmptyText设置为true。

  • ValidationGroup值是否在所有3个位置匹配:提交按钮,验证器控件和要验证的控件?
  • 提交按钮是否具有CausesValidation = true?
  • RadioButtonList是否具有 CausesValidation = true?

答案 1 :(得分:0)

  

“也许我正在访问   RadioButtonList以错误的方式......“

是的。

查看生成的标记,它将是这样的:

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

您的<%= wmi_send_sms.ClientID %>代码正在获取包含单选按钮列表的表格的ID。

就个人而言,在客户端工作时,我发现避免RadioButtonList更容易。只需创建两个RadioButton控件,使用GroupName属性将它们相互关联。

<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" />

然后,您可以通过访问<%= wmi_send_sms_y.ClientID %>

来检查您的验证工具中是否选中了“Y”