【问题标题】:CustomValidator not firing in controlCustomValidator 未在控制中触发
【发布时间】:2011-11-25 13:23:56
【问题描述】:

所以这就是问题所在。我在一个带有 CustomValidator 的 .ascx 控件中有一个 DropDownList。此控件具有由 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" ,但仍然得到相同的结果。我错过了什么?

【问题讨论】:

    标签: c# asp.net drop-down-menu customvalidator


    【解决方案1】:

    设置DropDownList的CausesValidation-Property为true,默认为false

    <asp:DropDownList ID="ddlQuestions" CausesValidation="True" CssClass="if" DataTextField="Question" DataValueField="iD" runat="server">
    

    您还必须相应地设置它的 Validationgroup 属性(参见下面的属性)。

    附注:您的用户控件中不需要成员变量ValidationGroup。只需使用直接设置/获取验证器的 ValidationGroup 属性的公共属性ValidationGroup。这样你就不需要在每次回发时都设置它,因为它无论如何都存储在 ViewState 中,如果你愿意,你也可以在 UserControl 本身中设置它。

    public string ValidationGroup {
        get { return cvddlQuestions.ValidationGroup; }
        set { cvddlQuestions.ValidationGroup = value; ddlQuestions.ValidationGroup=value; }
    }
    

    【讨论】:

    • 不幸的是,这并没有什么不同 :( 感谢您对物业的建议,听起来是个好建议
    【解决方案2】:

    事实证明,答案非常愚蠢。当我实例化所有这些代码所在的控件时,我必须在前端而不是后端设置 ValidationGroup 属性。

    假设我发布的代码位于名为 QuestionControl.ascx 的 .ascx 文件中。在我的页面上注册控件后,我必须编写以下内容:

    <asp:QuestionControl runat="server" id="qcPage" ValidationGroup="editQuestion" />
    

    不知道为什么说:

    qcPage.ValidationGroup = "editQuestion";
    

    由于该属性只是一个字符串,因此不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      相关资源
      最近更新 更多