2012-02-16 27 views
1

したがって、Ajaxツールキットの評価コントロールを検証するカスタムバリデーターを作成しています。しかし、クライアント側の検証は起動しません。カスタム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')は表示されません。

(すべてが正常に動作し、サーバー側)

編集マークアップ:2オーケー

<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> 

編集、これは...

生成されます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'プロパティはバリデータに定義されていますか? 1つのことは何も起こらないことがあります。 –

+1

アラートだけが発生するかどうか試したことがありますか?この文字列のようなものを試してくださいstrMessage = "Hello World" string script = "alert( '" + strMessage + "');"; ClientScript.RegisterClientScriptBlock(this.GetType()、 "Alert"、script、true);次にメッセージが実際にトリガされるかどうかを確認し、そこから取得して、検証するコントロールがいくつかのバリデータに割り当てられていることを確認します。これは意味がありますか? – MethodMan

+0

@KP - そうです。あなたは私の意見を含んでいますか? –

答えて

1

は私が...

を自分の質問に答えたように、私は明らかに間違って私のevaluationfunctionを割り当てたルックス。

私はこれにそれを変更しました:

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

今では動作します。

よろしくお願いします。