客户端验证未在我的自定义BaseValidator上触发

时间:2012-02-16 15:05:00

标签: c# asp.net validation ajaxcontroltoolkit

所以,我正在编写一个自定义验证器来验证Ajax Toolkit的Rating控件。但是,客户端验证没有触发。

我有这个方法来注册脚本:

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);
    string script = @"<script type=""text/javascript"">function RatingValidatorEvaluateIsValid(val)
{
    alert( 'here' );
    return false;
}</script> ";

    Page.ClientScript.RegisterClientScriptBlock(GetType(), "ratingValidator", script);
}

我注册了这样的属性:

protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)
{
    base.AddAttributesToRender(writer);

    // Add the client-side code (if needed)
    if (this.RenderUplevel)
    {
        writer.AddAttribute("evaluationfunction", "RatingValidatorEvaluateIsValid", false);
    }
}

脚本显示在页面上,以及属性,但alert('here')永远不会出现。

(一切正常,服务器端)

修改标记:

<ajaxToolkit:Rating ID="ajaxRating" runat="server" StarCssClass="ratingStar" WaitingStarCssClass="savedRatingStar" 
                FilledStarCssClass="filledRatingStar" EmptyStarCssClass="emptyRatingStar" CssClass="stars"
                RatingAlign="Horizontal" RatingDirection="LeftToRightTopToBottom" 
                AutoPostBack="True" OnChanged="OnChanged" />
<my:RatingValidator runat="server" ID="RatingValidator" ControlToValidate="ajaxRating"
ErrorMessage="Please select a rating." EnableClientScript="True"
</my:RatingValidator>

编辑2 好的,这很奇怪......

生成的span是正确的:

<span id="CPHUser_rating_RatingValidator" evaluationfunction="RatingValidatorEvaluateIsValid" style="visibility:hidden;">Please select a rating.</span>

但是底部的JS没有分配我的评估功能。

var CPHUser_rating_RatingValidator = document.all ? document.all["CPHUser_rating_RatingValidator"] : document.getElementById("CPHUser_rating_RatingValidator");
CPHUser_rating_RatingValidator.controltovalidate = "CPHUser_rating_ajaxRating";
CPHUser_rating_RatingValidator.errormessage = "Please select a rating.";

1 个答案:

答案 0 :(得分:1)

看起来我回答了我自己的问题...

我显然是错误地分配了evaluationfunction

我已将其更改为:

Page.ClientScript.RegisterExpandoAttribute(this.ClientID, "evaluationfunction", "RatingValidatorEvaluateIsValid");

现在可行。

感谢您的帮助,伙计们!