Переменная сеанса - имя не существует в текущем контексте

Я продолжаю получать сообщение об ошибке "Имя" Имя пользователя "не существует в текущем контексте. Как вы можете видеть," Имя пользователя "четко определено в моем коде позади страницы, и я ссылаюсь на свою страницу. Так почему он говорит, что это делает не существует?

Вот мой 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> 

5 ответов

Ваше поле ввода должно иметь runat=server если вы хотите получить к нему доступ из кода.

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

В противном случае вы получите сообщение об ошибке, что UserName не существует, как вы уже упоминали.

Вы должны иметь 'runat="server"' в UserName

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

"UserName" четко определено в моем коде позади

Нет, это не так - у вас есть клиентский элемент управления UserName но ничего в коде позади. Вы можете сделать его серверным элементом управления, добавив 'runat = "server"' к форме и элементу управления, или сослаться на переменную формы в выделенном фрагменте кода:

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

Объект UserName, соответствующий элементу управления, должен присутствовать в файле designer.cs страницы, над которой вы работаете. Это будет автоматически сгенерировано при сохранении страницы, но только если вы создадите свой элемент управления в качестве элемента управления на стороне сервера. Таким образом, маркировка элемента управления вводом runat="server" должна помочь.

Добавлять runat="server" к контролю надписи?

Другие вопросы по тегам