0

独自の関数を使用して、テキスト ボックスの値を検証したいと考えています。これは、形式が「MMM YYYY」のようなものだからです (例: 2014 年 12 月)。

AjaxControlToolkit を使用しています。maskededitvalidator が、CustomValidator のように ClientValidatonFunction プロパティを提供することを確認しました。

問題は、この関数が呼び出されないように見えることです。

ここで私の小さな JavaScript 関数:

<script type="text/javascript">
  function MyFunction(sender, args) {
    alert("foo");
  }
</script>

ここに私のASP

<asp:textbox id="StartTextBox" cssclass="textbox"
  style="width: 60px;" validationgroup="Dialog"
  causesvalidation="false" runat="server">
</asp:textbox>
<ajaxtoolkit:calendarextender id="StartCalendarExtender"
  targetcontrolid="StartTextBox" format="MMM yyyy"
  OnClientHidden="onCalendarHidden_StartTextBox"
  OnClientShown="onCalendarShown_StartTextBox"
  BehaviorID="calendar_StartTextBox" runat="server">
</ajaxtoolkit:calendarextender>
<ajaxtoolkit:maskededitextender id="StartMaskedEditExtender"
  targetcontrolid="StartTextBox" enabled="false"
  mask="??? 9999" masktype="Date" oninvalidcssclass="textbox_invalid"
  runat="server">
</ajaxtoolkit:maskededitextender>
<ajaxtoolkit:maskededitvalidator id="StartMaskedEditValidator"
  controlextender="StartMaskedEditExtender" display="Dynamic"
  controltovalidate="StartTextBox"
  clientvalidationfunction="MyClientFunction" enableclientscript="true"
  enabled="true" isvalidempty="false" runat="server">
</ajaxtoolkit:maskededitvalidator>

マイ アラートが表示されません。

問題は、私が正しくないことをしているのか、クライアント検証機能を呼び出すために何を変更する必要があるのか​​ということです。

AoE

4

1 に答える 1

0

クライアント側でデバッガーを切り替えると、javascript エラーが発生する可能性があります。また、スクリプトを「リリース」モードで実行しているため、縮小されていると思われます。あなたはこれをチェックしたいかもしれません。確認するには、スクリプトを「デバッグ」モードにします (ScriptManager で ScriptMode を Debug に切り替えます)。

これは、少なくとも 2011 年以降の既知のバグであり、2013 年 12 月のリリースの Ajax Toolkit ではまだ修正されていません。

バグレポート: http://ajaxcontroltoolkit.codeplex.com/workitem/26740

これは、デバッグ モード/フル/非縮小版が次のように言っているためです。

var args = { Value:mask, IsValid:true };
eval(value.ClientValidationFunction + "(value, args);");

しかし、リリースモード/縮小版は次のように言っています:

var s = { Value:mask, IsValid:true };
eval(n.ClientValidationFunction + "(value, args);");

ご覧のとおり、eval ステートメント内の文字列内の "value" と "args" は変更されていませんが、他の場所ではそれぞれ n と s に変更されています (値は常に n に縮小されているようですが、args はこのファイルのこの eval の 5 回の出現で c、e、s、および v に縮小されます)。

さまざまな回避策がありますが、本当に素晴らしいものはありません。上記のリンクを参照してください。ただし、基本的には次のとおりです。

  • このエクステンダーには、デバッグ/フル/非縮小バージョンのみを使用してください
  • vitor_canova はクロージャーを使用します (これはテストしていません)
  • 以前、ソースを使用して独自の AjaxControlToolkit をビルドし、縮小版を修正しましたが、最新バージョンではその方法が機能しなくなったため、別の方法を試しています...
于 2014-03-13T09:39:04.897 に答える