【ASP.NET】onchangeで呼び出すJavaScriptのメソッドでreturn後、ポストバックしない。

実現したいこと

① ASPでDropDownList、TextBoxを配置。
② サーバーサイドで、DropDownListについてOnchange属性を付与
③ DropDownListで値を変更した場合、JavaScriptの「_CheckTxtYMDメソッド」が呼び出される。
④ ③でtrueが返された場合、cmbSelect_SelectedIndexChangedが作動する。

前提

・DropDownListの値を変更した際に、「_CheckTxtYMDメソッド」に到達していること、例えばtxtYMDに「2024/05/30」を入力していた場合、正常に日付として認識され「return true;」に到達していることを確認済み。
⇒その後、ステップオーバーするとサーバーサイドに到達せず処理が終了する。

・aspのDropDownListでonchange属性を利用するのは適切ではないのか?

発生している問題・エラーメッセージ

・return trueした場合に、サーバーサイドの処理に到達しない

該当のソースコード

ASP.NET

1<asp:DropDownList ID="cmbSelect" runat="server" AutoPostBack="True"></asp:DropDownList> 2<asp:TextBox ID="txtYMD" TabIndex="10" runat="server" ImdeMode="Disabled" MaxLength="10"></asp:TextBox>

VB.net

1cmbSelect.Attributes.Add("OnChange", "return (_CheckTxtYMD(document.forms.Form1));")

JavaScript

1function _CheckTxtYMD(pThisForm) {2 var pTxtYMD= pThisForm.MainContent_txtYMD;3 //空白の場合はチェック無し4 if (_StrBothTrim(pTxtYMD.value).length == 0) {5 return true;6 }7 //日付正当性チェック8 if (_IsDate(pTxtYMD.value) == true) {9 return true;10 }11 else {12 //NG13 txtYMD.focus();14 txtYMD.select();15 return false;16 }17}18//※_StrBothTrim:文字列の両端の空白を取り除くメソッド19//※_IsDate:文字列が日付データとして読み取れるかをチェックするメソッド

VB.net

1 Private Sub cmbSelect_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbSelect.SelectedIndexChanged 2 //処理を記載 3 End Sub

試したこと

・Onchange属性を付与しない場合、適切にサーバーサイドの処理まで到達しました。
・OnChangeではなくOnClickにした場合、本来求めている動作とは異なりますが適切にサーバーサイドの処理まで到達しました。

コメントを投稿

0 コメント