2012-10-20 70 views
1

我想验证文本更改事件上的文本框。当我点击按钮,并输入任何无效的地址,无效的电子邮件地址错误首先发生,然后立即隐藏。asp.net ajax问题

我也有一个isRecordAlreadyExist函数,这个函数检查数据库中存在的重复值。我希望在textchanged事件中执行此检查。但事件Dosent被解雇。并且该值不被检查。 我的代码:

<tr> 
      <td style="padding-top: 20px;"> 
       Email Address<asp:RequiredFieldValidator ID="RequiredFieldValidator5" runat="server" 
        ErrorMessage="*" ControlToValidate="txtEmail" ForeColor="Red" ValidationGroup="val" Display="Dynamic"></asp:RequiredFieldValidator> 
      </td> 
      <td style="padding-top: 20px;"> 
       <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
        <ContentTemplate> 
         <asp:TextBox ID="txtEmail" runat="server" OnTextChanged="txtEmail_TextChanged" AutoPostBack="true"></asp:TextBox><asp:RegularExpressionValidator 
          ID="regexEmail" runat="server" ErrorMessage="Invalid Email Address" ControlToValidate="txtEmail" 
          ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ForeColor="Red" 
          ValidationGroup=""> 
         </asp:RegularExpressionValidator> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      </td> 
     </tr> 
<tr> 
      <td style="padding-top: 10px;"> 
       <asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btnSubmitCSS" OnClick="btnSubmit_Click" 
        ValidationGroup="val" OnClientClick="return chk_isValid();" /> 
       <asp:Button ID="btnReset" runat="server" CausesValidation="False" Text="Reset" CssClass="btnSubmitCSS" 
        OnClick="btnReset_Click" /> 
      </td> 
     </tr> 

我的身后代码..

protected bool isRecordAlreadyExist(TextBox txt_Value, int res) 
{ 
    ds = new DataSet(); 
    paramArray = new string[3, 2]; 
    paramArray[0, 0] = "@uname"; 
    paramArray[0, 1] = txtuname.Text.Trim(); 
    paramArray[1, 0] = "@emailid"; 
    paramArray[1, 1] = txtEmail.Text.Trim(); 
    paramArray[2, 0] = "`"; 
    obj = new DalLib(); 
    ds = obj.getDataSet("sp_Tbl_Login_MatchValues", paramArray); 
    gvLogin.DataSource = ds.Tables[res].DefaultView; 
    if (ds.Tables[res].Rows.Count > 0) 
    { 
     mtvResult.ActiveViewIndex = 3; 
     btnSubmit.Enabled = false; 
     return false; 
    } 
    else 
    { 
     btnSubmit.Enabled = true; 
     return true; 
    } 
} 

我的ASP:视图控制:

<asp:View ID="vAlreadyExist" runat="server"> 
      <img src="Images/delete.png" alt="Edit" /> 
      <asp:Label ID="lblAlreadyExist" runat="server">Record Already Exist</asp:Label> 
     </asp:View> 


protected void btnSubmit_Click(object sender, EventArgs e) 
    { 

     if (ViewState["action"].ToString() == "Insert") 
     { 
      obj = new DalLib(); 
      paramArray = new string[7, 2]; 
      // if (!string.IsNullOrEmpty(txtFullName.Text.Trim())) 
      { 
       paramArray[0, 0] = "@FullName"; 
       paramArray[0, 1] = txtFullName.Text.Trim(); 
      } 

      //if (!string.IsNullOrEmpty(txtuname.Text.Trim())) 
      { 

       paramArray[1, 0] = "@uname"; 
       paramArray[1, 1] = txtuname.Text.Trim(); 
      } 
      //if (!string.IsNullOrEmpty(txtPwd.Text.Trim())) 
      { 
       paramArray[2, 0] = "@pwd"; 
       paramArray[2, 1] = txtPwd.Text.Trim(); 
      } 
      //if (!string.IsNullOrEmpty(txtEmail.Text.Trim())) 
      { 
       paramArray[3, 0] = "@emailid"; 
       paramArray[3, 1] = txtEmail.Text.Trim(); 
      } 

      paramArray[4, 0] = "@isAdmin"; 
      paramArray[4, 1] = chkAdmin.Checked.ToString(); 

      paramArray[5, 0] = "@isActive"; 
      paramArray[5, 1] = chkActive.Checked.ToString(); 
      paramArray[6, 0] = "`"; 
      result = obj.setData("sp_Tbl_Login_Insert", paramArray); 
      LoadData(); 
      EmptyFields(); 
      mtvResult.ActiveViewIndex = 0; 
     } 

}

protected void txtEmail_TextChanged(object sender, EventArgs e) 
{ 
    isRecordAlreadyExist(txtEmail, 1); 
} 

回答

3

你混合客户端与验证服务器。你有AutoPostBack="true"的文本框。 regularExpression检查客户端上的验证并且不需要AutoPostBack。单击按钮时需要服务器验证。 Removing AutoPostBack从文本框将导致客户端验证check the email format模糊的文本框和服务器验证将按钮单击完成。还从文本框removeOnTextChanged="txtEmail_TextChanged"

+0

阿迪尔布莱,它是如此愚蠢的我!谢谢, 我需要另一个帮助.. –

+0

不用担心兄弟,继续。 – Adil

+0

我正在更新它在我的问题。等待。 –