我正试图弄清楚如何在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事件中或其他地方手动验证,并且在失败的情况下,通过标签或弹出警报提醒错误的用户?
答案 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>
的样本
答案 1 :(得分:1)
在无情的灾难性展示中,我设法错过了ListView公开属性EditItem。这意味着我可以逃脱
CType(ListView1.EditItem.FindControl("chkWaive"),CheckBox).Checked
根据格拉斯曼先生的回应,我可以使用CustomValidator查询该状态和文本框。