2012-06-29 1 views
0
<%@ Page Title="Log In" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="EQ.Account.Login" %> 
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
</asp:Content> 
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
<h2> 
    Log In 
</h2> 
<p> 
    Please enter your Employee Code and password. 
    If you don't have an account Please Contact your Manager. 
</p> 
<asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false"> 
    <LayoutTemplate> 
     <span class="failureNotification"> 
      <asp:Literal ID="FailureText" runat="server"></asp:Literal> 
     </span> 
     <asp:ValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification" 
      ValidationGroup="LoginUserValidationGroup"/> 
     <div class="accountInfo"> 
      <fieldset class="login"> 
       <legend>Account Information</legend> 
       <p> 
        <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label> 
        <asp:TextBox ID="txtUserName" runat="server" CssClass="textEntry"></asp:TextBox> 
        <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName" 
         CssClass="failureNotification" ErrorMessage="User Name is required." ToolTip="User Name is required." 
         ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator> 
       </p> 
       <p> 
        <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label> 
        <asp:TextBox ID="txtPassword" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox> 
        <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" 
         CssClass="failureNotification" ErrorMessage="Password is required." ToolTip="Password is required." 
         ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator> 
       </p> 
       <p> 
        <asp:CheckBox ID="RememberMe" runat="server"/> 
        <asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Keep me logged in</asp:Label> 
       </p> 
       <p> 
       <asp:Label ID="lblErrorMessage" runat="server" CssClass="failureNotification" Visible="false" /> 
       </p> 
      </fieldset> 
      <p class="submitButton"> 
       <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Log In" ValidationGroup="LoginUserValidationGroup" OnClick="LoginButton_Click"/> 
      </p> 
     </div> 
    </LayoutTemplate> 
</asp:Login> 

веб-элементы управления не узнавая в соответствующем классе отделенного кода

Это моя страница ASP, но на странице CodeBehind т.е. Login.aspx.cs, когда им пытаются получить значения элементов управления, как lblErrorMessage, txtuserName и txtPassword, im получая ошибку, что «Ошибка 1 Имя« txtUserName »не существует в текущем контексте. C: \ Users \ dsingh \ Documents \ Visual Studio 2010 \ Projects \ EQ \ EQ \ Account \ Login.aspx.cs 64 46 EQ ". Ожидание, если кто-то решит эту проблему и подскажет мне, почему она не распознает элементы управления из кода.

ответ

1

Для доступа к текстовому окну UserName вы пройдете по дереву объектов с помощью метода FindControl. НАПРИМЕР,

string myValue = (LoginUser.FindControl("UserName") as TextBox).Text; 

Чтобы сделать жизнь немного легче и код более читаемым можно добавить метод расширения для возврата строго типизированных элементов управления.

// usage 
var myControlUsingExtensionMethod = LoginUser.FindControl<TextBox>("UserName").Text; 

public static class ControlExtensions 
{ 
    public static T FindControl<T>(this Control control, string id) where T : Control 
    { 
     return control.FindControl(id) as T; 
    } 
} 
1

Я предполагаю, что вы используете WebApplication вместо веб-сайта, если это так, то вам нужно объявить элементы управления в коде, это делается автоматически для вас, когда вы используете Visual Studio для создания страницы ASPX и элементы управления объявлены, как только вы создаете серверный элемент управления со свойством ID, элементы управления регистрируются в файле конструктора:

что-то вроде этого:

namespace WebApplication1 { 


    public partial class DynamicControls { 

     /// <summary> 
     /// form1 control. 
     /// </summary> 
     /// <remarks> 
     /// Auto-generated field. 
     /// To modify move field declaration from designer file to code-behind file. 
     /// </remarks> 
     protected global::System.Web.UI.HtmlControls.HtmlForm form1; 

     /// <summary> 
     /// lblMessage control. 
     /// </summary> 
     /// <remarks> 
     /// Auto-generated field. 
     /// To modify move field declaration from designer file to code-behind file. 
     /// </remarks> 
     protected global::System.Web.UI.WebControls.Label lblMessage; 
    } 
} 

при использовании веб-сайта, вы делаете не нужно декларируют их, явно, что работа будет сделана компилятором ASP.Net в первый раз, доступ пользователей вашего сайта

Эти файлы автоматически создаются Visual Studio, вы увидите что-то подобное в вашем обозревателе решений:

enter image description here

0

System.Web.UI.WebControls.Login (осина: Логин) контроль происходит от System.Web.UI.WebControls.CompositeControl, который в свою очередь реализует INamingContainer.

Когда класс реализует INamingContainer, он становится ответственным за «отслеживание» его дочерних элементов управления.

Для этих типов элементов управления дочерние элементы управления не могут быть обращены простым обращением к их идентификатору в коде позади, поскольку дочерние элементы управления будут динамически созданы родительским элементом управления. Вместо этого вы должны использовать метод родительского элемента управления FindControl, чтобы получить ссылку на них.

См. Ответы Кейна о том, как использовать FindControl.

Смежные вопросы