我在网上找到了关于这个的文章,但我似乎无法让它发挥作用。
这是我当前的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”。
对于我更改“txtPasssword”文本的任何内容,我都会收到该错误。
答案 0 :(得分:2)
两件事。
首先,您必须按实际名称引用对象。正如mikhairu指出的那样,“txtPassword”不是对象名称。 TextBox对象是“密码”。
其次,同样重要的是,这个背景很重要。您的页面上没有“密码”文本框。名为“LoginUser”的用户控件执行此操作。所以你需要做两件事之一。一种选择是从Login控件继承并添加用于设置密码的代码,这可能有点超出你的范围,无论如何我认为这是一个坏主意。另一个选择是执行以下操作:
LoginUser.Password.Attributes.Add("value", "defaultpassword");
然而,我并不完全确定这会奏效。你很可能不得不这样做:
TextBox txtPassword = (TextBox)LoginUser.FindControl("Password");
txtPassword.Attributes.Add("value", "defaultpassword");
答案 1 :(得分:1)
您必须首先找到控件,因为NamingContainer
是Login
- 控件不是页面:
var txtPassword = (TextBox)LoginUser.FindControl("PassWord");
答案 2 :(得分:1)
由于您的文本框位于LayoutTemplate
控件的Login
内,因此您必须先找到它。
示例:
TextBox txtPassword = (TextBox)LoginUser.FindControl("Password");
txtPassword.Attributes.Add("value", "defaultpassword");