无法设置Control.FindControl()找到的控件的Text属性

时间:2012-09-13 20:54:52

标签: c# asp.net findcontrol

我正在尝试做什么:我正在通过CreateUserWizard控件创建用户,而我正在尝试将密码设置为随机生成的字母数字密码。密码TextBox对用户(管理员)不可见。

我尝试过的解决方案:我找到密码TextBox并尝试更改该值,但不会设置该值。我的代码如下:

CreateUserWizard1_CreatingUser(object sender, LoginCancelEventArgs e) 
{
    TextBox Password = (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("Password");
    Password.Text = "randomAlphaNumericPassword";
}

找到密码控件,Text属性似乎已设置,但一旦离开事件方法,它就会忘记新值并返回原来的状态。我知道这是一个实际的参考,但无法理解为什么价值不会设置。

这是我的asp标记:

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server"
    EnableViewState="False" LoginCreatedUser="False" 
    oncreateduser="CreateUserWizard1_CreatedUser"
    oncreatinguser="CreateUserWizard1_CreatingUser" 
    CompleteSuccessText="A new account has been successfully created!" 
    ContinueDestinationPageUrl="~/Accounts.aspx" 
    CreateUserButtonText="Create Account" 
    AutoGeneratePassword="False">
    <WizardSteps>
        <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
            <ContentTemplate>
            ...
                <asp:TextBox ID="Password" runat="server" Visible="false"></asp:TextBox>
            </ContentTemplate>
        </asp:CreateUserWizardStep>
        ...
    </WizardSteps>

2 个答案:

答案 0 :(得分:0)

您的页面生命周期中是否有某些内容(例如在Page_Load上)将值设置为默认值?如果是这样,请确保您在以下代码块中执行此操作

if(!IsPostBack)
{
   // set default value
}

答案 1 :(得分:0)

我明白了。值设置正确,但我认为不是因为我一直收到密码失败消息,“密码少于7个字符且必须包含至少一个非字母数字字符”,即使我的密码超过7个字符。

我的错误是假设消息中的两个条件都是真的。此情况并非如此。如果任一条件为真,则显示此消息。

我将我的web.config文件更改为最少要求0个非字母数字字符,之后一切正常。之前我没有指定任何内容,因此默认为至少1个非字母数字字符。

如果我不得不向某人表示赞赏,那么询问控件的验证码就是MStodd 。这让我更仔细地看待这个问题。

感谢大家的帮助。