0

我有一个表单,其中包含一个名为“wmi_cell_phone”的文本框和一个 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>

但它似乎不起作用..也许我以错误的方式访问 RadioButtonList..

4

2 回答 2

1

如果 ClientValidationFunction 被 Validator 调用,您应该首先调试。

如果即使未选择任何内容,验证器也应该工作,则必须将ValidateEmptyText设置为 true。

  • ValidationGroup 值是否在所有 3 个位置都匹配:提交按钮、验证器控件和要验证的控件?
  • 提交按钮是否有 CausesValidation=true?
  • RadioButtonList 是否有CausesValidation =true?
于 2010-11-20T20:34:36.713 回答
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" />

然后,您可以通过访问检查是否在您的验证器中检查了“Y”<%= wmi_send_sms_y.ClientID %>

于 2010-11-21T08:15:37.750 回答