2012-01-24 5 views
1

私は1つのステップで、ユーザが入力し、彼の名前、EMAILADDRESS、PHONENUMBERなどのJavaScript:ウィザード

すると、ユーザープレスウィザードの「次へ」ボタンができ、私はwizardcontrolを過ごしています指定された電話番号を持つアカウントが存在するかどうかを調べるためにデータベースをチェックする。

この場合、システムは、新しい情報をその番号にバインドするか、新しい電話番号を入力するかどうかをユーザに尋ねることになっています。

情報をバインドすると言えば、情報はバインドされ、ウィザードはステップ2に進み、新しい電話番号を入力すると、ウィザードはステップ1にとどまります。

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e) 
{ 
    if (Wizard1.ActiveStepIndex == 0) 
    { 
     Page.Validate(); 
     if (Page.IsValid) 
     { 
      if (!Mobile_ValidateForExistingUsers(((TextBox)WizardStep1.ContentTemplateContainer.FindControl("txtPhone")).Text)) 
      { 
     //JavaScript popup or something, which prompts the user? 
      } 
     } 
    } 
} 

validaterは次のとおりです:

のコードは次のようになり、ユーザー、この質問をすると、どちらか続行するか、彼は中にいくつかの新しい情報を入力できるようにする方法

protected bool Mobile_ValidateForExistingUsers(string usrPhone) 
{ 
    bool IsValid = false; 

    using (SqlConnection conn = new SqlConnection(connString)) 
    using (SqlCommand cmd = new SqlCommand("spCheckMobile", conn)) 
    { 
     cmd.CommandType = System.Data.CommandType.StoredProcedure; 
     cmd.Parameters.Add(new SqlParameter("@Mobile", usrPhone)); 

     cmd.Connection.Open(); 

     object result = cmd.ExecuteScalar(); 

     if (result == null) 
     { 
      IsValid = true; 
     } 
    } 
    return IsValid; 
} 

ウィザード?

答えて

0

これを処理する最も効果的な方法は、Mobile_ValidateForExistingUsers(phoneNumber)をAJAX呼び出しのWebMethodとして機能させることです。 AJAXコードを記述したら、AJAX呼び出しをクライアント側の検証関数として<asp:CustomValidator>に、falseを返した場合はwindow.alert('use new number')にフォローアップしてください。

また、<asp:CustomValidator>を使用して、サーバー側のコードを処理することもできますが、検証サーバー側を処理する場合はクライアント側の検証機能を設定する必要はありません。 CustomValidator1.IsValidプロパティをMobile_ValidateForExistingUsers(phoneNumber)関数の結果に設定してから、Page.Validate()に呼び出して、ページが有効かどうかを確認します。そうでない場合は、runat="server"隠し入力にフラグを立てて、クライアント側のコードにwindow.onloadというメッセージを表示させて、新しい番号を使用する場合は、それを2番目の隠しフィールドに格納します。例は次のとおりです。

protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e) 
{ 
    if (Wizard1.ActiveStepIndex == 0) 
    { 
     Page.Validate(); 
     if (Page.IsValid) 
     { 
      if (HiddenField2.Value == '') //Client-side Flag not set 
      { 
       if (!Mobile_ValidateForExistingUsers(((TextBox)WizardStep1.ContentTemplateContainer.FindControl("txtPhone")).Text)) 
       { 
        CustomValidator1.IsValid = false; // Invalidate the page so the Next Step fails. 
        HiddenField1.Value = false;   // Page will get re-rendered to client to fix errors and stay on the same step. 
       } 
      } 
      else 
      { 
       if (HiddenField2.Value == 'true') 
       { 
        // Use new binding logic. 
       } 
       else 
       { 
        //User does not want to use new number, so logic to handle goes here. 
       } 
      } 

     } 
    } 
} 

とし、その後どこかでクライアントサイドのマークアップに:このことができます

/* 
* Crude example 
*/ 
<script type="text/javascript"> 
    window.onload = function() { 
     'use strict'; 
     var hf1 = document.getElementById('<%=HiddenField1.ClientID %>'); 
     var hf2 = document.getElementById('<%=HiddenField2.ClientID %>'); 
     var myForm = document.getElementById('<%=Form1.ClientID %>'); 
     if (hf1.value === 'false') { // or if (hf1.value) if you just want the truthiness of the value's existence (depending on how you flag stuff) 
      hf2.value = window.confirm('Wanna use this number?').toString().toLowerCase(); 
     } 
     myForm.submit(); 
    } 
</script> 

希望、

ピート

関連する問題