【问题标题】:Cannot access asp.net changepassword controls in codebehind无法在代码隐藏中访问 asp.net changepassword 控件
【发布时间】:2012-07-10 14:27:39
【问题描述】:

我无法访问代码隐藏中的任何 asp 控件。 .aspx页面如下

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="ChangePassword.aspx.cs" Inherits="ChangePassword" ValidateRequest="false"  %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:ChangePassword ID="ChangePassword1" runat="server" CssClass="MinutesList" 
    onchangedpassword="ChangePassword1_ChangedPassword">
    <ChangePasswordTemplate>
        <table cellpadding="1" cellspacing="0" style="border-collapse:collapse;">
            <tr>
                <td>
                    <table cellpadding="0">
                        <tr>
                            <td align="center" colspan="2">
                                Change Your Password</td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Label ID="CurrentPasswordLabel" runat="server" 
                                    AssociatedControlID="CurrentPassword">Password:</asp:Label>
                            </td>
                            <td>
                                <asp:TextBox ID="CurrentPassword" runat="server" TextMode="Password" Visible="false" >></asp:TextBox>
                                <asp:RequiredFieldValidator ID="CurrentPasswordRequired" runat="server" 
                                    ControlToValidate="CurrentPassword" ErrorMessage="Password is required." 
                                    ToolTip="Password is required." ValidationGroup="ChangePassword1">*</asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Label ID="NewPasswordLabel" runat="server" 
                                    AssociatedControlID="NewPassword">New Password:</asp:Label>
                            </td>
                            <td>
                                <asp:TextBox ID="NewPassword" runat="server" TextMode="Password"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="NewPasswordRequired" runat="server" 
                                    ControlToValidate="NewPassword" ErrorMessage="New Password is required." 
                                    ToolTip="New Password is required." ValidationGroup="ChangePassword1">*</asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Label ID="ConfirmNewPasswordLabel" runat="server" 
                                    AssociatedControlID="ConfirmNewPassword">Confirm New Password:</asp:Label>
                            </td>
                            <td>
                                <asp:TextBox ID="ConfirmNewPassword" runat="server" TextMode="Password"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="ConfirmNewPasswordRequired" runat="server" 
                                    ControlToValidate="ConfirmNewPassword" 
                                    ErrorMessage="Confirm New Password is required." 
                                    ToolTip="Confirm New Password is required." ValidationGroup="ChangePassword1">*</asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td align="center" colspan="2">
                                <asp:CompareValidator ID="NewPasswordCompare" runat="server" 
                                    ControlToCompare="NewPassword" ControlToValidate="ConfirmNewPassword" 
                                    Display="Dynamic" 
                                    ErrorMessage="The Confirm New Password must match the New Password entry." 
                                    ValidationGroup="ChangePassword1"></asp:CompareValidator>
                            </td>
                        </tr>
                        <tr>
                            <td align="center" colspan="2" style="color:Red;">
                                <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Button ID="ChangePasswordPushButton" runat="server" 
                                    CommandName="ChangePassword" Text="Change Password" 
                                    ValidationGroup="ChangePassword1" />
                            </td>
                            <td>
                                <asp:Button ID="CancelPushButton" runat="server" CausesValidation="False" 
                                    CommandName="Cancel" Text="Cancel" />
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </ChangePasswordTemplate>
    <SuccessTemplate>
        <table cellpadding="1" cellspacing="0" style="border-collapse:collapse;">
            <tr>
                <td>
                    <table cellpadding="0">
                        <tr>
                            <td align="center" colspan="2">
                                Change Password Complete</td>
                        </tr>
                        <tr>
                            <td>
                                Your password has been changed!</td>
                        </tr>
                        <tr>
                            <td>
                                <asp:Button ID="HomePageButton" runat="server" Text="Continue" CausesValidation="true" 
                                    onclick="HomePageButton_Click" />
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </SuccessTemplate>
</asp:ChangePassword>
</asp:Content>

代码隐藏

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class ChangePassword : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    //TextBox password = (TextBox)ChangePassword1.FindControl("CurrentPassword");
    //Label passwordLabel = (Label)ChangePassword1.FindControl("CurrentPasswordLabel");
    TextBox password = ChangePassword1.FindControl("CurrentPassword") as TextBox;
    Label passwordLabel = ChangePassword1.FindControl("CurrentPasswordLabel") as Label;
    //TextBox CurrentPassword = ChangePassword1.FindControl("CurrentPassword") as TextBox;
    if (Request.QueryString["p"] != null)
    {
        passwordLabel.Visible = false;
        password.TextMode = TextBoxMode.SingleLine;
        password.Visible = false;
        password.Text = Request.QueryString["p"];
    }
}
protected void ChangePassword1_ChangedPassword(object sender, EventArgs e)
{

}
protected void HomePageButton_Click(object sender, EventArgs e)
{
    //Link.ToHomePage();
    Response.Redirect("HomePage.aspx");
}

}

我遇到的问题是对象引用未设置为密码标签和密码上的对象实例。有谁知道如何将这些纳入范围,以便我可以在代码隐藏中编辑文本和可见性属性?

【问题讨论】:

    标签: c# asp.net asp.net-controls change-password


    【解决方案1】:

    尝试使用:

      TextBox password = ChangePassword1.Controls[0].FindControl("CurrentPassword") as TextBox;
      Label passwordLabel = ChangePassword1.Controls[0].FindControl("CurrentPasswordLabel") as Label;
    

    【讨论】:

    • 感谢@Adil Mammadov,它运行良好。你能解释一下为什么这行得通而其他方法没有吗?
    • 我很高兴它成功了。我认为这是由于您必须使用 ChangePassword1 中的模板:ChangePasswordTemplate 和 SuccessTemplate。因为您的 TextBox 和 Label 在第一个模板中,您必须编写 Controls[0]。如果他们在 SuccessTempate 中,它将是 Controls[1]。可能是我弄错了,请尝试在 SuccessTemplate 中获取“HomePageButton”并编写 Controls[1]。如果它有效,那意味着我没有弄错:)
    【解决方案2】:

    使用 ChangePasswordTemplateContainer 代替 Controls[0] 不会改变控件中模板的顺序。例如...在 ChangePasswordTemplate 之前添加 SuccessTemplate 将导致 Controls[0] 代码中断。

    ChangePassword1.ChangePasswordTemplateContainer.FindControl("CurrentPassword")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 2012-12-20
      相关资源
      最近更新 更多