Asp.net 上的 c# Textchanged 事件触发了两次
c# Textchanged event on Asp.net is firing twice
我有一个简单的网络表单来更改当前用户的密码,所以我有三个 TextBoxes
,一个用于实际密码,两个用于确认我要保存的新密码。当我尝试写我的实际密码时,它与我在数据库中的密码相同,写新密码的 TextBox
应该只被启用,而且确实如此,但我在我的 [=15 上放置了一个调试点=] 事件,它在那个时候触发以启用我的 TextBox
,但几乎立即,它第二次触发,我启用了第二个 TextBox
,但我丢失了我在第一个 TextBox
.
知道为什么会这样吗?
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 的网络表单,请注意,这是我遇到此问题的唯一表单。
这是我的 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">×</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>
我发现我的代码出了什么问题,当文本模式设置为 "password" 时,ASP 会自动删除该文本框中的任何文本。为了解决这个问题,我所做的是:
string pass = txt_password.Text;
txt_password.Attributes.Add("value", pass);
我在结束我的 TextChanged 事件之前添加了这两行代码,所以即使它执行回发,它也不会删除我的文本。
我有一个简单的网络表单来更改当前用户的密码,所以我有三个 TextBoxes
,一个用于实际密码,两个用于确认我要保存的新密码。当我尝试写我的实际密码时,它与我在数据库中的密码相同,写新密码的 TextBox
应该只被启用,而且确实如此,但我在我的 [=15 上放置了一个调试点=] 事件,它在那个时候触发以启用我的 TextBox
,但几乎立即,它第二次触发,我启用了第二个 TextBox
,但我丢失了我在第一个 TextBox
.
知道为什么会这样吗?
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 的网络表单,请注意,这是我遇到此问题的唯一表单。
这是我的 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">×</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>
我发现我的代码出了什么问题,当文本模式设置为 "password" 时,ASP 会自动删除该文本框中的任何文本。为了解决这个问题,我所做的是:
string pass = txt_password.Text;
txt_password.Attributes.Add("value", pass);
我在结束我的 TextChanged 事件之前添加了这两行代码,所以即使它执行回发,它也不会删除我的文本。