所以这就是问题所在。我在.ascx控件中有一个DropDownList,上面有一个CustomValidator。此控件具有由PageLoad中的属性设置的ValidationGroup。触发验证的按钮位于使用此控件的另一个文件中。问题是服务器端验证永远不会被解雇。我在其中添加断点,它们永远不会被击中。任何人对发生的事情都有任何想法?这是代码:
Dropdown.ascx:
<asp:DropDownList ID="ddlQuestions" runat="server">
</asp:DropDownList>
<asp:CustomValidator runat="server" ID="cvddlQuestions" OnServerValidate="cvddlQuestions_ServerValidate"
ErrorMessage="* Parent question is required." ValidateEmptyText="true" Display="Dynamic" />
</p>
</div>
代码背后:
protected void Page_Load(object sender, EventArgs e)
{
cvddlQuestions.ValidationGroup = ValidationGroup;
//ValidationGroup is a property in the parent file that is being set on PageLoad
}
protected void cvddlQuestions_ServerValidate(object sender, ServerValidateEventArgs args)
{
args.IsValid = false;// (ddlQuestions.SelectedValue != "-1");
}
在使用Dropdown.ascx的父文件中,我有这个按钮:
<asp:LinkButton ID="btnQuestionAdd" runat="server" OnClick="btnQuestionAdd_Click"
ValidationGroup="editQuestion" CommandName="add" />
父文件代码背后:
protected void btnQuestionAdd_Click(object sender, EventArgs e)
{
Page.Validate("editQuestion");
if (Page.IsValid) //ALWAYS SEEMS TO BE TRUE
{
//Do something
}
}
当我向customvalidator添加客户端验证功能时,它没有问题。但页面总是返回有效。我尝试添加一个ControlToValidate并设置ValidateEmptyText =“true”,我仍然得到相同的结果。我错过了什么?
答案 0 :(得分:3)
将DropDownList的CausesValidation - 属性设置为true
,默认为false
。
<asp:DropDownList ID="ddlQuestions" CausesValidation="True" CssClass="if" DataTextField="Question" DataValueField="iD" runat="server">
您还必须相应地设置它的Validationgroup属性(参见下面的属性)。
附注:您的UserControl中不需要成员变量ValidationGroup
。只需使用直接设置/获取Validator的ValidationGroup属性的公共属性ValidationGroup
。通过这种方式,您无需在每次回发时设置它,因为无论如何它都存储在ViewState中,如果需要,您也可以在UserControl中设置它。
public string ValidationGroup {
get { return cvddlQuestions.ValidationGroup; }
set { cvddlQuestions.ValidationGroup = value; ddlQuestions.ValidationGroup=value; }
}
答案 1 :(得分:0)
事实证明,答案是令人难以置信的愚蠢。当我实例化所有这些代码所在的控件时,我必须在前端而不是后端设置ValidationGroup属性。
假设我发布的代码位于名为QuestionControl.ascx的.ascx文件中。在我的页面上注册控件后,我必须写下以下内容:
<asp:QuestionControl runat="server" id="qcPage" ValidationGroup="editQuestion" />
不知道为什么说:
qcPage.ValidationGroup = "editQuestion";
没有用,因为该属性只是一个字符串。