【发布时间】:2012-08-11 14:06:42
【问题描述】:
我不明白如何在转发器中进行正确的自定义服务器端验证。
我有三列中继器控件: 1) 注册 - 复选框 2) 参加 - 复选框 3) 时间 - 文本框
我需要编写验证时间文本框值的服务器端自定义验证。
现在我已经在我的转发器中编写了以下自定义验证:
<asp:Repeater runat="server" ID="rptResidents" OnItemDataBound="rptResidents_ItemDataBound">
....
<asp:CheckBox runat="server" CssClass="RegisterSpan" name="RegisterChkName" ID="chkRegister" />
<asp:CheckBox runat="server" CssClass="AttendedSpan" name="AttendedChkName" ID="chkAttended" />
<asp:TextBox runat="server" ID="txtTime" Width="30px" MaxLength="3" Columns="3"></asp:TextBox>
<asp:CustomValidator runat="server" Width="1px" ID="valTimeRange" ControlToValidate="txtTime" OnServerValidate="valTimeRange_ServerValidate" Text="*" ErrorMessage="Minutes cannot exceed the minutes of the event" />
....
服务器端验证功能:
protected void valTimeRange_ServerValidate(object sender, ServerValidateEventArgs e)
{
int maxAllowedMinutes = 0;
maxAllowedMinutes = Convert.ToInt32(this.txtMaxAllowedMinutes.Text);
int val = Convert.ToInt32(e.Value);
if (val > maxAllowedMinutes)
{
e.IsValid = false;
}
else
{
e.IsValid = true;
}
}
这很好用。但我需要添加额外的逻辑。我还需要使用复选框 - 在我的自定义服务器端验证中注册和参加。
所以 ServerValidate 函数看起来像:
protected void valTimeRange_ServerValidate(object sender, ServerValidateEventArgs e)
{
if (CHECKBOX_REGISTER_IS_CHECKED && CHECKBOX_ATTENDED_IS_CHECKED) //?????
{
DO_VALIDATION_DESCRIBED_ABOVE
}
else
{
e.IsValid = true; //NO NEED TO VALIDATE TIME HERE OR ANY OTHER LOGIC COULD BE HERE
}
}
所以这里的问题是 - 我不明白如何在服务器端验证方法中获取复选框值(两个复选框都来自转发器)。
【问题讨论】:
-
我认为我为您的问题找到了一个很好的答案:stackoverflow.com/a/14654349/2914856 我看到您正在从文本字段中获取 maxAllowedMinutes。也许使用 javascript 或 jQuery 来验证这些控件并验证客户端会很好。除非你有理由不使用 javascripts。
标签: .net validation