我有一个usercontrol,其中包含一些带有必填字段验证器的文本框和一些自定义验证器,并对它们进行比较验证器。在代码隐藏中,我检查了所有使用IsValid
属性有效的验证器。此外,我在usercontrol中的内容位于更新面板中。
现在我做的时候
Page.Validate("myValidationGroup")
并查看Page.IsValid
,即使我知道该论坛的验证员有效,也会说false
。
为什么会发生这种情况?
更新:
我只有一个usercontrol实例。我手动调试并在C#按钮上设置了断点,检查所有验证器是否有效。所有已启用的都是有效的,未启用的那些也是有效的。我不确定何时打电话Page.Validate("groupname")
,如果Page.Validate
,只会检查具有该组名称的控件(如果已启用)。但是在验证了残疾人有效后才有意义,因为如果禁用它们应该有效,我意识到这可能不是问题。
如果在我的单选按钮列表中选择了特定的单选按钮,则会启用某些验证器。我找到了解决这个问题的另一种方法,它不是那么漂亮,但确实有效。
以下是我的标记:
<!-- Note, I removed the divs and other ui stuff, and am just showing the core functionality bits -->
<asp:UpdatePanel ID="FeedbackUpdatePanel" UpdateMode="Conditional" runat="server">
<ContentTemplate>
1. <asp:Label ID="Question1Label" Text="* Which of the following best describes the primary purpose of today’s visit?" runat="server" /><br />
<asp:RadioButtonList ID="Question1RadioButtonList" CellPadding="2" runat="server">
<asp:ListItem Text="To learn about Transamerica Retirement Management" Value="A" />
<asp:ListItem Text="To learn about the services offered by Transamerica Retirement Management" Value="B" />
<asp:ListItem Text="To contact an advisor" Value="C" />
<asp:ListItem Text="To access your accounts" Value="D" />
<asp:ListItem Text="Other (Please explain):" Value="E" />
</asp:RadioButtonList>
<asp:RequiredFieldValidator ID="Question1RadioButtonListRequiredFieldValidator" ControlToValidate="Question1RadioButtonList" Enabled="true" EnableClientScript="true" Text="* Required" ValidationGroup="FeedbackValidationGroup" runat="server" />
<br />
<asp:TextBox ID="OtherQuestion1AnswerTextBox" Width="500" Height="100" TextMode="MultiLine" style="display:none;" runat="server" />
<asp:RequiredFieldValidator ID="OtherQuestion1AnswerRequiredFieldValidator" ControlToValidate="OtherQuestion1AnswerTextBox" Enabled="false" EnableClientScript="true" Text="* Required" ValidationGroup="FeedbackValidationGroup" runat="server" />
2. <asp:Label ID="Question2Label" Text="* Please describe your feedback, question or problem below:" runat="server" />
<br />
<asp:RequiredFieldValidator ID="Question2RequiredFieldValidator" ControlToValidate="Question2TextBox" EnableClientScript="true" Enabled="true" Text="* Required" ValidationGroup="FeedbackValidationGroup" runat="server" />
3. <asp:Label ID="AskUserForEmailLabel" Text="Please enter your e-mail address if you would like to request a response to an inquiry:" runat="server" />
<br />
<asp:RequiredFieldValidator ID="AskUserForEmailRequiredFieldValidator" Display="Dynamic" ControlToValidate="AskUserForEmailTextBox" Enabled="false" Text="* Email address is required." ValidationGroup="FeedbackValidationGroup" runat="server" />
<asp:CustomValidator ID="AskUserForEmailCustomValidator" Display="Dynamic" ControlToValidate="AskUserForEmailTextBox" ClientValidationFunction="validateEmail" ValidateEmptyText="false" Enabled="true" Text="* Please enter a valid e-mail address." ValidationGroup="FeedbackValidationGroup" runat="server" />
<asp:Button ID="FeedbackSubmitButton" Text="Submit" OnClick="FeedbackSubmitButton_Click" ClientIDMode="Static" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
在我的代码隐藏点按钮中,我有
protected void FeedbackSubmitButton_Click(object sender, EventArgs e)
{
if (Question1RadioButtonList.SelectedItem.Value == "C")
{
AskUserForEmailRequiredFieldValidator.Enabled = true;
}
if (Question1RadioButtonList.SelectedItem.Value == "E")
{
OtherQuestion1AnswerRequiredFieldValidator.Enabled = true;
}
// Does not seem to be working
Page.Validate("FeedbackValidationGroup");
if (Page.IsValid)
{
// Perform my custom logic
}
}
我想出的黑客是:
protected void FeedbackSubmitButton_Click(object sender, EventArgs e)
{
if (Question1RadioButtonList.SelectedItem.Value == "C")
{
AskUserForEmailRequiredFieldValidator.Enabled = true;
}
if (Question1RadioButtonList.SelectedItem.Value == "E")
{
OtherQuestion1AnswerRequiredFieldValidator.Enabled = true;
}
List<BaseValidator> allValidators = new List<BaseValidator>();
allValidators.Add(Question1RadioButtonListRequiredFieldValidator);
allValidators.Add(OtherQuestion1AnswerRequiredFieldValidator);
allValidators.Add(Question2RequiredFieldValidator);
allValidators.Add(AskUserForEmailRequiredFieldValidator);
allValidators.Add(AskUserForEmailCustomValidator);
bool isValid = true;
foreach (BaseValidator validator in allValidators)
{
if (!validator.IsValid)
{
isValid = false;
break;
}
}
if (isValid)
{
// Perform my custom logic
}
}
现在这个黑客确实有效,但正如我之前所说,它并不漂亮。
有什么想法吗?