0

我在网上找到了关于这个的文章,但我似乎无法让它工作。

这是我当前的 HTML(删除了所有混乱的布局内容)

<asp:Login ID="LoginUser" runat="server" EnableViewState="false"
OnAuthenticate="LoginUser_Authenticate">
    <LayoutTemplate>

        <asp:TextBox ID="UserName" runat="server" Text="username" 
        CssClass="text-box login-text-box"></asp:TextBox>

        <asp:TextBox ID="Password" runat="server" CssClass="text-box 
        login-text-box" TextMode="Password"></asp:TextBox>

    </LayoutTemplate>
</asp:Login>

这是我在网上找到的服务器端代码:

    protected void Page_Load(object sender, EventArgs e)
    {
        txtPassword.Attributes.Add("value", "defaultpassword")
    }

我不断收到消息:“txtPassword 在当前上下文中不存在”。

对于我将“txtPassword”文本更改为的任何内容,我都会收到该错误。

4

3 回答 3

3

两件事情。

首先,您必须按对象的实际名称引用对象。正如 mikhairu 指出的那样,“txtPassword”不是对象名称。TextBox 对象是“密码”。

其次,同样重要的是,上下文很重要。您的页面上没有“密码”文本框。名为“LoginUser”的用户控件确实如此。所以你需要做两件事之一。一种选择是从 Login 控件继承并添加用于设置密码的代码,这可能有点超出您的范围,无论如何我认为这是一个坏主意。另一种选择是执行以下操作:

LoginUser.Password.Attributes.Add("value", "defaultpassword");

但是,我不完全确定这会奏效。您很可能必须这样做:

TextBox txtPassword = (TextBox)LoginUser.FindControl("Password");
txtPassword.Attributes.Add("value", "defaultpassword");
于 2013-08-21T21:04:44.143 回答
1

您必须先找到控件,因为它NamingContainerLogin-control 而不是页面:

var txtPassword = (TextBox)LoginUser.FindControl("PassWord");
于 2013-08-21T21:04:33.847 回答
1

由于您的文本框位于控件内部,因此LayoutTemplateLogin必须先找到它。

例子:

TextBox txtPassword = (TextBox)LoginUser.FindControl("Password");
txtPassword.Attributes.Add("value", "defaultpassword");
于 2013-08-21T21:05:57.287 回答