2012-02-16 82 views
1

所以,我正在編寫一個自定義驗證器來驗證Ajax Toolkit的Rating控件。儘管如此,客戶端驗證並未解決。客戶端驗證不會觸發我的自定義BaseValidator

我有這樣的方法來註冊腳本:

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

愚蠢的問題 - 但你有你的'ControlToValidate'屬性在驗證器上定義?一件事情可能導致什麼都不會發生。 – 2012-02-16 15:11:11

+1

你試過看看是否只有警報會觸發..嘗試像這樣的字符串strMessage =「Hello World」string script =「alert('」+ strMessage +「');」; ClientScript.RegisterClientScriptBlock(this.GetType(),「Alert」,script,true);然後看看它是否會實際觸發消息..然後從那裏拿到它,以確保您的控件驗證分配給一些驗證程序..這是否有道理..? – MethodMan 2012-02-16 15:14:39

+0

@KP - 是的。你想包括我的觀點嗎? – 2012-02-16 15:16:56

回答

1

看起來像我回答我自己的問題......

我顯然分配我evaluationfunction不正確。

我把它改成這樣:

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

,現在它的工作原理。

感謝您的幫助,夥計們!

相關問題