###前提・実現したいこと
以前、商品コード(Textbox)に直接コードを入力して、商品コードの情報を取得後に、javascriptで
「宜しいですか?(OK/キャンセル)」確認メッセージを表示する方法を質問させていただきました。
確認メッセージが表示できるようにはなったですが、商品コードがマスタに存在するかDBチェックを行った後に、確認メッセージを表示するようにしたいのです。
現在、商品コード存在チェックはサーバ側、確認メッセージはクライアント側から呼び出しており、
①商品コードを入力
②確認メッセージ表示(「画面をクリアします。宜しいですが?(OK/キャンセル)」Confirmで表示)
③「商品コードが存在しません。」と画面エラーのメッセージ表示エリアに出力。
これを
①→③→②の順番に変したいのですが、イベントの発生順がどうしても、クライアント→サーバの順になる為、
実現できません。
先に存在チェックを行い、コードが存在する場合のみ、確認メッセージ表示の処理に進み、
存在しない場合は、エラーメッセージを表示した後は、確認メッセージ表示を行わず処理を終了させたいのですが、うまくいきません。
うまく実現する方法はないでしょうか
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
C#
1aspxファイル側ソース 2// javascript部 3 <script type="text/javascript"> 4 function switchSelect() { 5 var status; 6 status = 0; // 0:処理無 1:情報クリア 7 var value = $("#<%=hfTradeId.ClientID%>").val(); 8 if (!(value == null || value == "")) { 9 if (confirm("情報をクリアします。よろしいですか?")) { 10 status = 1; 11 } 12 SetValue("<%=hfStatusMode.ClientID%>", status); 13 } 14 15 } 16 </script> 17 18 19 <%--商品コード--%> 20 <asp:TextBox ID="txtSyohinCd" runat="server" 21 AutoPostBack="true" OnTextChanged="txtSyohinCdChanged" 22 EnableViewState="true" Width="65%" Text="" Enabled="true"></asp:TextBox> 23 <%--選択--%> 24 <asp:LinkButton CssClass="button-link" runat="server" ID="btnSelect" Width="60" OnClientClick="switchSelect;" OnClick ="btnSearchSelect_Click" Text="選択" />
csファイル側ソース /// <summary> ///商品検索画面 選択ボタン /// </summary> /// <param name="sender"</param> /// <param name="e"></param> protected void btncSearchSelect_Click(object sender, EventArgs e) { //選択処理 Search(sender, e); //この中でDBより商品コードをキーに商品情報を取得 } /// <summary> ///商品コード変更時 /// </summary> /// <param name="sender"</param> /// <param name="e"></param> protected void txtSyohinCdChanged(object sender, EventArgs e) { // 商品コード存在チェックを行う(戻り値:true:あり/false:なし) bool ret = chkSyohinCd(txtSyohinCd); if (!ret) { DisplayErrorMessage("対象の商品コードは存在しません。"); // ←エラーメッセージ表示モジュール return; } //選択処理 Search(sender, e); //この中でDBより商品コードをキーに商品情報を取得 }
###試したこと
商品コードの存在チェックを検証コントロール(CustomValidator)を使ってみました。
aspxファイル側ソース // javascript部 <script type="text/javascript"> function fnSyohinCdExists(sender, args) { args.IsValid = true; var secId = $("#<%=txtSyohinCd.ClientID%>").val(); if ((secId == null || secId == "")) return; // 商品コード存在チェックモジュール IsSyohinCdExists(secId, onResultsecId); }); } function onResultsecId(result) { if (!result) { args.IsValid = false; return; } var status; status = 0; // 0:処理無 1:情報クリア var value = $("#<%=hfTradeId.ClientID%>").val(); if (!(value == null || value == "")) { if (confirm("情報をクリアします。よろしいですか?")) { status = 1; } SetValue("<%=hfStatusMode.ClientID%>", status); } </script> <%--商品コード--%> <asp:TextBox ID="txtSyohinCd" runat="server" AutoPostBack="true" OnTextChanged="txtSyohinCdChanged" EnableViewState="true" Width="65%" Text="" Enabled="true"></asp:TextBox> <asp:CustomValidator ID="cvSyohinCd" runat="server" CssClass="error" ControlToValidate="txtSyohinCd" SetFocusOnError="true" ErrorMessage="対象の商品コードは、存在しません。" ClientValidationFunction="fnSyohinCdExists" ValidateEmptyText="true" ValidationGroup="ExistsCheck" > <span class="ValSpan">!</span></asp:CustomValidator>
###補足情報(言語/FW/ツール等のバージョンなど)
Windows10
Visual Studio 2013
Framework4.0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。