【问题标题】:Session Variable - The name does not exist in current context会话变量 - 当前上下文中不存在该名称
【发布时间】:2014-05-28 19:04:37
【问题描述】:

我不断收到错误消息“当前上下文中不存在名称“用户名”。正如您所见,“用户名”在我的代码背后的页面上明确定义,我正在引用我的页面。那么为什么会这样说不存在?

这是我的 C# -

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

    protected void btnLogOn_Click(object sender, EventArgs e)
    {
        Session["SubName"] = UserName.Text;
    }
}

这是我的 HTML -

<p>
        Please enter your username and password.
    </p>

    <form action="/Account/LogOn" method="post">
        <div>
            <fieldset>
                <legend>Account Information</legend>

                <div class="editor-label">
                    <label for="UserName">User name</label>
                </div>
                <div class="editor-field">
                    <input id="UserName" name="UserName" type="text" value="" />

                </div>

                <div class="editor-label">
                    <label for="Password">Password</label>
                </div>
                <div class="editor-field">
                    <input id="Password" name="Password" type="password" />

                </div>

                <p>
                    <input id="btnLogOn" type="submit" value="Log On" />
                </p>
            </fieldset>
        </div>
    </form>
        </div> 

【问题讨论】:

  • 如果你想从后面的代码中访问,你的输入框需要有runat=server

标签: c# asp.net web-controls runatserver


【解决方案1】:

如果你想从后面的代码中访问它,你的输入框需要有runat=server

&lt;input id="UserName" name="UserName" type="text" value="" runat=server /&gt;

否则你会收到一个用户名不存在的错误,正如你已经提到的。

【讨论】:

    【解决方案2】:

    您应该在用户名中有 'runat="server"'

    <input id="UserName" name="UserName" type="text" value="" runat="server" />
    

    【讨论】:

      【解决方案3】:

      “用户名”在我后面的代码中明确定义

      不,不是——您有一个名为UserName客户端 控件,但代码隐藏中没有任何内容。您可以通过将 'runat="server"' 添加到表单和控件来使其成为服务器控件,或者在代码隐藏中引用表单变量:

      protected void btnLogOn_Click(object sender, EventArgs e)
      {
          Session["SubName"] = Request["UserName"]; // pull value from form variable
      }
      

      【讨论】:

        【解决方案4】:

        与控件对应的用户名对象需要存在于您正在处理的页面的 Designer.cs 文件中。 这将在页面保存时自动生成,但前提是您将控件创建为服务器端控件。 所以用 runat="server" 标记输入控件应该可以解决问题。

        【讨论】:

          【解决方案5】:

          runat="server" 添加到标签控件?

          【讨论】:

          • 你的意思是输入控件,在标签上这样做没有任何意义。
          • 是的,到ID为UserName的控件。
          猜你喜欢
          • 1970-01-01
          • 2012-09-12
          • 2014-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多