Условная обязательная проверка полей в ASP.net ListView - PullRequest
3 голосов
/ 26 мая 2010

У меня чертовски много времени пытается выяснить, как реализовать проверку в ListView. Цель состоит в том, чтобы потребовать от пользователя ввода текста в комментариях TextBox, но только если флажок установлен. Недостатком является то, что эти элементы управления находятся в EditTemplate объекта ListView. Ниже приведен фрагмент соответствующей части кода EditTemplate:

<tr style="background-color: #00CCCC; color: #000000">
    <td>
        Assume Risk?
        <asp:CheckBox ID="chkWaive" runat="server" 
             Checked='<%# Bind("Waive") %>' />
    </td>
    <td colspan="5">
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" 
             runat="server" ErrorMessage="Comments required" 
             ControlToValidate="txtComments" />
        <asp:TextBox Width="95%" ID="txtComments" runat="server" 
             Text='<%# Eval("Comment") %>'></asp:TextBox>
    </td>
    <td>
        <asp:Button ID="btnSave" runat="server"
             Text="Save" CommandName="Update" Width="100px" />
    </td>
</tr>

Есть ли способ сделать условную проверку с использованием этого метода? Если нет, есть ли способ, которым я мог бы проверить вручную в событии ItemUpdating Listview или где-то еще, и при ошибке предупредить пользователя об ошибке через метку или всплывающее предупреждение?

Ответы [ 2 ]

4 голосов
/ 26 мая 2010

Вы можете использовать CustomValidator.

ASPX

<asp:CustomValidator runat="server" id="custPrimeCheck"
        ControlToValidate="txtPrimeNumber"
        OnServerValidate="PrimeNumberCheck"
        ClientValidationFunction="CheckPrime"
        ErrorMessage="Invalid Prime Number" />

Проверка на стороне сервера

Sub PrimeNumberCheck(sender as Object, args as ServerValidateEventArgs)
    Dim iPrime as Integer = Cint(args.Value), iLoop as Integer, _
        iSqrt as Integer = CInt(Math.Sqrt(iPrime))

    For iLoop = 2 to iSqrt
      If iPrime mod iLoop = 0 then
        args.IsValid = False
        Exit Sub
      End If
    Next

    args.IsValid = True
End Sub

Проверка клиента

<script language="JavaScript">
<!--
  function CheckPrime(sender, args)
  {
    var iPrime = parseInt(args.Value);
    var iSqrt = parseInt(Math.sqrt(iPrime));

    for (var iLoop=2; iLoop<=iSqrt; iLoop++)
      if (iPrime % iLoop == 0) 
      {
         args.IsValid = false;
         return;
      }

    args.IsValid = true;
  }
// -->
</script>

Образец взят из http://www.4guysfromrolla.com/articles/073102-1.aspx

1 голос
/ 27 мая 2010

При катастрофическом отображении неумелости мне удалось пропустить, что ListView предоставляет свойство EditItem. Что означает, что я могу сойти с рук

CType(ListView1.EditItem.FindControl("chkWaive"),CheckBox).Checked

Я могу запросить состояние этого и текстового поля, используя CustomValidator, согласно ответу мистера Грассмана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...