3

我刚刚开始使用 ASP.NET WebForms (VS 2012) 创建一个新的 Web 应用程序。在项目中,我有一个带有 TextBox 的 Login.aspx 页面(由 VS 自动创建):

<asp:TextBox ID="Username" runat="server"></asp:TextBox>

现在我需要访问该文本框的值,我正在使用以下内容:

String username = Html.Encode(Username.Text);

我收到一个错误,指出用户名不存在。在 Login.Designer.cs 中没有声明 TextBox。

在设计器上,当我选择文本框时,它在“属性”下拉列表中标识为:

Unnamed1.LayoutTemplate.Username

这是我在 VS2012 中的第一个项目;我在 VS2008 或更早版本中没有遇到过这个问题。这里有什么不同吗?

4

5 回答 5

1

在模板属性未标记属性之前,您无法访问模板化控件的子控件TemplateInstance(TemplateInstance.Single)。这就是 ASP.NET 模板化控件的工作方式。

在这种特殊情况下,您可以使用UserNameLogin 控件的属性。在幕后,Login 控件将搜索自己的 LayoutTemplate 以查找IEditableTextControl具有UserNameID 的控件实例。

于 2013-08-27T12:32:52.993 回答
0

试试这个,

string username=Username.Text;
于 2013-08-27T11:53:35.863 回答
0

做这个

String username = Server.Html.Encode(Username.Text);
于 2013-08-27T12:12:37.243 回答
0

有时 Build -> Rebuild 会修复这样的错误。

于 2013-08-27T12:16:02.643 回答
0

首先使用设计器将您的 asp:login 控件转换为模板。这适用于登录在模板中添加了 <div runat="server"> 的我:

HtmlGenericControl ChooseDiv = Login1.FindControl("ChooseFireDepartment") as HtmlGenericControl;
ChooseDiv.Visible = false;

这适用于添加到同一模板的下拉列表:

var ddlList = Login1.FindControl("myDdlList") as DropDownList;
...
ddlList.DataBind();
于 2016-07-02T20:45:31.893 回答