ASP.net ListView中的条件必需字段验证

时间:2010-05-25 20:09:45

标签: asp.net validation

我正试图弄清楚如何在ListView中实现验证。目标是要求用户在注释TextBox中输入文本,但前提是选中了CheckBox。缺点是这些控件位于ListView的EditTemplate中。下面是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>

有没有办法使用这种方法进行条件验证?如果没有,有没有办法可以在Listview的ItemUpdating事件中或其他地方手动验证,并且在失败的情况下,通过标签或弹出警报提醒错误的用户

2 个答案:

答案 0 :(得分:4)

您可以使用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

Clientside验证

<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 :(得分:1)

在无情的灾难性展示中,我设法错过了ListView公开属性EditItem。这意味着我可以逃脱

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

根据格拉斯曼先生的回应,我可以使用CustomValidator查询该状态和文本框。