1

ValidationSummaryはポストバック時のエラーのリストを表示します。各フィールドが固定されると、バリデーターが起動され、検証テキストが消えます。 ValidationSummaryも自動的に更新したいと思います。Update ValidationSummaryリストのコントロールがぼやけていますか?

<asp:TextBox ID="ForenameTextBox" onblur="ValidationSummaryOnSubmit()" runat="server" /> 

それが変化し、すべてのフィールドでこれを維持する手段として、これは、理想的ではありません。

次は正常に動作します。 (。ValidationSummaryOnSubmitは、Microsoftの機能です)だから私は動的にそれを実行しようとしました:

addEvent(window, "load", UpdateValidationSummary); 

function addEvent(obj, evType, fn) { 
    if (obj.addEventListener) { 
     obj.addEventListener(evType, fn, true); 
    } else { 
     if (obj.attachEvent) { 
      var r = obj.attachEvent("on" + evType, fn); 
      return r; 
     } 
    } 
} 

function removeEvent(obj, evType, fn) { 
    if (obj.removeEventListener) { 
     obj.removeEventListener(evType, fn, true); 
     return true; 
    } else if (obj.detachEvent) { 
     var r = obj.detachEvent("on" + evType, fn); 
     return r; 
    } 
} 

function UpdateValidationSummary() { 
    if (typeof (Page_Validators) == "undefined") { 
     return; 
    } 
    var i, val, ctrl; 
    for (i = 0; i < Page_Validators.length; i++) { 
     val = Page_Validators[i]; 
     if (val.controltovalidate != null && val.controltovalidate != "") { 
      ctrl = document.getElementById(val.controltovalidate); 
      if (ctrl != null && typeof (ValidationSummaryOnSubmit) == "function") { 
       //add call to ValidationSummary on blur 
       addEvent(ctrl, "blur", ValidationSummaryOnSubmit); 
      } 
     } 
    } 
} 

しかしこれは動作しません - 一つのフィールドが固定されているとき、全体にValidationSummaryが消え、ValidationSummaryOnSubmit機能は二回呼び出されますように思われます。 addEvent関数の代わりに単純な代入を使用すると、それは機能しますが、すでにonBlurイベントで何か起こっている可能性のあるフィールドを扱いたいと思います。

基本的には、ValidationSummaryOnSubmit関数の呼び出しを各コントロールのハンドラーのonBlurの「リスト」に追加するだけでよいと思います。上記のコードがこれを行うように見えないのはなぜですか?ここで

+1

これが役に立つかもしれません別のアプローチです。 http://stackoverflow.com/questions/9610939/asp-net-validationsummary-not-shown-after-onchange-event/10539156#10539156 – Milox

答えて

1

は(も検証グループで動作するはずです)すべてのTextBox上のonblur属性を取得するには、サーバー側のアプローチです:

  • 例えば、TextBoxEx
  • が属性を追加、テキストボックスから派生したクラスを作成します。この派生クラスの例では、this.Attributes.Add("onblur", string.Format("ValidationSummaryOnSubmit('{0}')", this.ValidationGroup);
  • 使用タグマッピング既存<asp:TextBox>タグのすべてがまだ動作するように: <system.web> <pages> <tagMapping> <add tagType="System.Web.UI.WebControls.TextBox" mappedTagType="MyControls.TextBoxEx"/> </tagMapping> </pages> </system.web>

もう1つの方法は、ControlAdaptersを使用して属性を追加することです。

関連リンク:
Understanding ASP.NET Validation
MSDN - tagMapping Element for pages

+0

ええ、それはいいアイデアです、ありがとう。私はなぜスクリプトが正常に動作しないのか知りたいのですが... –

+0

最初のメソッドを使用すると、単にaspコントロールの属性に入れるだけで、検証メッセージが2回表示されます。誰が原因なのか知っていますか? – Sherri

関連する問題