【问题标题】:ASP.net The name 'userName' does not exist in the current contextASP.net 当前上下文中不存在名称“userName”
【发布时间】:2014-09-04 12:52:30
【问题描述】:

我已经点击了 20 多个链接,试图在不同的网站上解决这个问题。

请帮帮我

所以我正在尝试进行简单的登录身份验证。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;

public partial class Account_Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void loginButton_Click(object sender, EventArgs e)
{
    if(FormsAuthentication.Authenticate(UserName.Text, Password.Text)
    {

    }
}
}

但是弹出一条错误消息说“当前上下文中不存在名称'userName'并且当前上下文中不存在名称'Password'。

这是aspx代码

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"      CodeFile="Login.aspx.cs" Inherits="Account_Login" %>

 <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">
<hgroup class="title">
    <h1>Login Page</h1>
</hgroup>
<section id="loginForm">
    <asp:Login ID="Login1" runat="server" ViewStateMode="Disabled" RenderOuterTable="false">
        <LayoutTemplate>
            <p class="validation-summary-errors">
                <asp:Literal runat="server" ID="FailureText" />
            </p>
            <fieldset>
                <legend>Log in Form</legend>
                <ol>
                    <li>
                        <asp:Label ID="Label1" runat="server" AssociatedControlID="UserName">User name</asp:Label>
                        <asp:TextBox runat="server" ID="UserName" />
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="UserName" CssClass="field-validation-error" ErrorMessage="The user name field is required." />
                    </li>
                    <li>
                        <asp:Label ID="Label2" runat="server" AssociatedControlID="Password">Password</asp:Label>
                        <asp:TextBox runat="server" ID="Password" TextMode="Password" />
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="Password" CssClass="field-validation-error" ErrorMessage="The password field is required." />
                    </li>
                    <li>
                        <asp:CheckBox runat="server" ID="RememberMe" />
                        <asp:Label ID="Label3" runat="server" AssociatedControlID="RememberMe" CssClass="checkbox">Remember me?</asp:Label>
                    </li>
                </ol>
                <asp:Button ID="loginButton" runat="server" CommandName="Login" Text="Log in" OnClick="loginButton_Click" />
            </fieldset>
        </LayoutTemplate>
    </asp:Login>
    <p>
        <a href="Register.aspx">Register</a>
        if you don't have an account.
    </p>
</section>

请帮帮我:)

【问题讨论】:

  • ID 是 UserName 而不是 userName...
  • 哎呀,对不起,我正在测试骆驼肠衣是否影响它。但它没有并且忘记更改值。但是我还是遇到同样的错误,谢谢:)

标签: c# asp.net


【解决方案1】:

UserName 位于 Login 控件中,因此您需要通过 Login1 控件访问它。

string userName = Login1.UserName;
string password = Login1.Password;    

代码中的另一个问题是,如果您使用 Login 控件,则不应使用 loginButton_Click 事件。

相反,您需要根据自己的饱腹感使用以下内容 -

  • 登录
  • 登录

【讨论】:

  • Hey Win :) 我试过这样 string userName = Login1.UserName;字符串密码 = Login1.Password; if(FormsAuthentication.RedirectFromLoginPage(userName, password)) { } 但我收到错误消息
  • if(FormsAuthentication.RedirectFromLoginPage(userName, password)) { 不是有效的声明。 RedirectFromLoginPage 的返回类型 是 void,所以它不返回任何东西。在我的评论中参考this link。
  • @helloGoodDay 根据您在其他答案中的 cmets,您是在尝试实现 Form Authentication 还是 Membership Provider? Form Authentication 是 Membership Provider 的一个子集。无论哪种方式,它们都与您原来的问题完全不同;它们是巨大的话题,无法在评论区回答。如果您对 Form Authentication 或 Membership Provider 有任何疑问,请创建一个单独的问题。
  • 你是对的 :) 我将其更改为 FormsAuthentication.Authenticate(userName, password)) 并且现在可以使用。非常感谢。我正在尝试实现表单身份验证
【解决方案2】:

C# 区分大小写。 根据您的控制 ID,它应该是带有大写“U”的用户名:

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

你的代码应该是:

protected void loginButton_Click(object sender, EventArgs e)
{
    if(FormsAuthentication.RedirectFromLoginPage(UserName.Text, Password.Text)
    {

    }
}

编辑 - 注意到有问题的控件在用户控件中,因此代码现在应该是:

protected void loginButton_Click(object sender, EventArgs e)
{
    if(FormsAuthentication.RedirectFromLoginPage(Login1.UserName.Text, Password.Text)
    {

    }
}

但是您在用户名 ID 中仍然存在拼写错误

【讨论】:

  • UserName 文本框在 Login 控件内。你不能像那样访问它 - UserName.Text。 stackoverflow.com/a/25667546/296861
  • @Ahmedilyas 是的,我忘记将用户名更改为用户名,因为我正在测试骆驼外壳是否会影响它。但事实证明它没有。 (Login1.UserName.Text,Password.Text)
  • @Ahmedilyas 和 Win 我已将其更改为 Authenticate,因为 RedirectToLogin 参数不允许同时包含两个字符串。所以我把它改成了 Authenticate string userName = Login1.UserName;字符串密码 = Login1.Password; if(FormsAuthentication.Authenticate(userName, password)) { } 这就是我的代码现在的样子。但我收到警告“System.Web.Security.FormsAuthentication(string,string)”已过时:“推荐的替代方法是使用 Membership API,例如 Membership.ValidateUser,谢谢 :)
【解决方案3】:

代码区分大小写。

if(FormsAuthentication.RedirectFromLoginPage(UserName.Text, Password.Text)
{

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2014-04-22
    • 2017-06-17
    相关资源
    最近更新 更多