Возникли проблемы с CustomValidator, который проверяет значения RadioButtonList и TextBox в asp.net - PullRequest
0 голосов
/ 20 ноября 2010

У меня есть форма с содержит, среди прочего, TextBox с именем "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 ..

Ответы [ 2 ]

1 голос
/ 20 ноября 2010

Сначала необходимо выполнить отладку, если функция ClientValidationFunction вызывается средством проверки.

Если Валидатор должен работать, даже если ничего не было выбраноВы должны установить для ValidateEmptyText значение true.

  • Совпадает ли значение ValidationGroup во всех трех местах: кнопка отправки, элемент управления валидатора и элемент управления для проверки?
  • Есть ли у кнопки отправки CausesValidation = true?
  • Имеет ли RadioButtonList CausesValidation = true?
0 голосов
/ 21 ноября 2010

"Может быть, я получаю доступ к 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 %> получает идентификатор таблицы, содержащей список переключателей.

Лично, когда я работаю на стороне клиента, мне гораздо легче избежать 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 %>

...