2016-12-02 177 views
0

我有一个简单的Webform来更改当前用户的密码,所以我有三个TextBoxes,一个用于实际密码,另外两个用于确认我想要的新密码保存。当我尝试编写我的实际密码并且与我的数据库中的密码相同时,编写新密码的TextBox应该只启用,但它确实存在,但我在我的TextChanged事件上放置了一个调试点,它会触发该时间为了使我的TextBox,但几乎立即,它第二次火灾,我有我的第二TextBox启用,但我失去了我原来在我的第一TextBox文本。Asp.net上的c#Textchanged事件发射两次

任何想法为什么会这样?

protected void txt_passvieja_TextChanged(object sender, EventArgs e) 
    { 
     usuario_BLL bll = new usuario_BLL(); 
     usuario obj = new usuario(); 
     obj = bll.Leer(Session["usuario"].ToString()); 
     if (txt_passvieja.Text == obj.passwordUsuario) 
     { 
      txt_passwordnueva.Enabled = true; 
     } 
     else 
     { 
      lbl_header.Text = "Error"; 
      lbl_body.Text = "La contraseña ingresada no coincide con la base de datos"; 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "myFunction", "myFunction()", true); 
      Limpiar(); 
     } 
    } 

所以这是我TextChanged事件,我在添加一个调试点“txt_passwordnueva.Enabled = TRUE;”当我改变文本时,我发现它执行两次这个事件。 这是一个使用MasterPage的Webform,请注意,这是我遇到此问题的唯一形式。

这是我的aspx代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="CambiarContraseña.aspx.cs" Inherits="LegalCaseWeb.CambiarContraseña" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
    <link href="css/login.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript"> 
     function myFunction() { 
      $("#contraseña_incorrecta").modal('show'); 
     } 
    </script> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <div style="text-align:center; background-color: #ffffff; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);"> 
     <asp:Label ID="lbl_passvieja" runat="server" Text="Contraseña actual: " CssClass="labels"></asp:Label> 
     <asp:TextBox ID="txt_passvieja" runat="server" TextMode="Password" CssClass="textbox" AutoPostBack="true" BackColor="#efefef" OnTextChanged="txt_passvieja_TextChanged"></asp:TextBox> 
     <br /> 
     <br /> 
     <asp:Label ID="lbl_passwordnueva" runat="server" Text="Nueva contraseña: " CssClass="labels"></asp:Label> 
     <asp:TextBox ID="txt_passwordnueva" TextMode="Password" runat="server" AutoPostBack="true" BackColor="#efefef" OnTextChanged="txt_passwordnueva_TextChanged"></asp:TextBox> 
     <br /> 
     <br /> 
     <asp:Label ID="lbl_confirmar" runat="server" Text="Confirme nueva contraseña: " CssClass="labels"></asp:Label> 
     <asp:TextBox ID="txt_confirmar" TextMode="Password" runat="server" AutoPostBack="true" BackColor="#efefef" OnTextChanged="txt_confirmar_TextChanged"></asp:TextBox> 
     <br /> 
     <br /> 
     <asp:Button ID="btn_cambiar" runat="server" Text="Cambiar contraseña" AutoPostBack="true" OnClick="btn_cambiar_Click" /> 
    </div> 
    <div id="contraseña_incorrecta" class="modal fade" role="dialog"> 
     <div class="modal-dialog"> 
      <!-- Modal content--> 
      <div class="modal-content"> 
       <div class="modal-header"> 
        <button type="button" class="close" data-dismiss="modal">&times;</button> 
        <h4 class="modal-title"><asp:Label ID="lbl_header" runat="server"></asp:Label></h4> 
       </div> 
       <div class="modal-body"> 
        <p><asp:Label ID="lbl_body" runat="server"></asp:Label></p> 
       </div> 
       <div class="modal-footer"> 
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
       </div> 
      </div> 
     </div> 
    </div> 
</asp:Content> 
+0

你可以分享代码,看看事件发生了两次。不仅是'TextChanged',而且还有您使用文本框的地方 –

+2

请附上[MCVE]来演示您的问题。可能有一个事件处理程序连接两次,导致事件的双重触发。 – t0mm13b

+0

完成,对不起,我是一个新手在这里 –

回答

0

我发现了什么是错我的代码,它是当文本模式被设置为“password”,ASP自动删除您在任何文本文本框。为了解决我所做的就是这样的:

string pass = txt_password.Text; 
txt_password.Attributes.Add("value", pass); 

我添加的代码这两行结束我的TextChanged事件之前,所以以这种方式,即使在执行回发,它不会删除我的文字。