开发者

ASP.net Session login

I'm trying to implement a session login into my web application. At the moment I'm receiving an error message "The name 'txtUserName' does not exist in the current context. When I check the aspx file the textbox ID="txtUserName" exists.

<h2>
    Log In
</h2>
<p>
    Please enter your username and password.
    <asp:HyperLink ID="RegisterHyperLink" runat="server" EnableViewState="false">Register</asp:HyperLink> if you don't have an account.
</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>
            </fieldset>
            <p class="submitButton">
                <asp:Button ID="LoginButton" Onclick="LoginButton_Click" runat="server" CommandName="Login" Text="Log In" ValidationGroup="LoginUserValidationGroup"/>
            </p>
        </div>
    </LayoutTemplate>
</asp:Login>

My current code behind file is:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.Configuration;
using System.Collections.Generic;

namespace Project.Account
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            RegisterHyperLink.NavigateUrl = "Register.aspx?ReturnUrl=" + HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
        }

        protected void LoginButton_Click(object sender, EventArgs e)
        {

            string connectionString = WebConfigurationManager.ConnectionStrings["DBConnectionString1"].ConnectionString;


            SqlConnection co开发者_开发百科n = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("LoginUsers", con);
            cmd.CommandType = CommandType.StoredProcedure;


            cmd.Parameters.Add(new SqlParameter("@UserName", SqlDbType.VarChar, 20));
            cmd.Parameters["@UserName"].Value = txtUserName.Text;

            cmd.Parameters.Add(new SqlParameter("@Password", SqlDbType.VarChar, 20));
            cmd.Parameters["@Password"].Value = txtPassword.Text;


                        }
    }
}

txtUSerName.Text and txtPassword.Text are the one that have the underlined error


Because the controls are in a template, the control is not aware of them at design time since it can't be guaranteed which template is loaded as this is done at runtime, so you will need to use FindControl:

var userNameTextBox = LoginUser.FindControl("txtUserName") as TextBox;

if (userNameTextBox != null)
{
    //proceed.
}


First mistake

from your markup :

<asp:TextBox ID="txtUserName"
<asp:TextBox ID="txtPassword"

But in the code behind, you are using:

if (UserName.Text == [@"Username"] && Password.Text == [@"Password"])

Secondly, controls that are in the login control are not directly accessible in the code behind. You have to find the control and get the text from them. It should be like...

cmd.Parameters["@USerName"].Value = 
                    ((TextBox)LoginUser.FindControl("txtUserName")).Text;

 cmd.Parameters["@Password"].Value = 
                    ((TextBox)LoginUser.FindControl("txtPassword")).Text;


this is also a sulotion -> LoginUser.txtUserName

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜