#c# #asp.net #session #session-variables #session-state
#c# #asp.net #сеанс #переменные сеанса #состояние сеанса
Вопрос:
Хорошо, у меня довольно простая проблема, я хочу определить некоторые переменные состояния сеанса
До сих пор в моем коде на C # для страницы aspx у меня есть объявление следующего типа, которое отлично работает в моем файле index.aspx.cs.
Session[Constants.firstName] = "Jordan";
или
Session[Constants.firstName] = 123;
Я хочу захватить текст из текстовых полей index.aspx, хотя вместо этого вот так.
Session[Constants.firstName] = txtb_FName.Text;
Проблема в том, что изменение этого значения на переменную txtb_FName.Текст не работает, и когда я отлаживаю, он показывает, что локальная переменная заполняется «», а не вводом из моего текстового поля.
Весь КОД выглядит следующим образом;
index.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="ProjectPhase02.index" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Project Phase 02</title>
<link id="Link1" href="main.css" rel="stylesheet" runat="server" />
</head>
<body>
<form id="form1" runat="server" method="get" action="accountCreationConfirmation.aspx">
<div>
<asp:Label CssClass="accountFormLable" runat="server" Text="First Name: "></asp:Label>
<asp:TextBox ID="txtb_FName" runat="server"></asp:TextBox>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Last Name: "></asp:Label>
<asp:TextBox ID="txtb_LName" runat="server"></asp:TextBox>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="User Name: "></asp:Label>
<asp:TextBox ID="txtb_UName" runat="server"></asp:TextBox>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Password: "></asp:Label>
<asp:TextBox ID="txtb_Password" runat="server"></asp:TextBox>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Address: "></asp:Label>
<asp:TextBox ID="txtb_Address" runat="server"></asp:TextBox>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Email: "></asp:Label>
<asp:TextBox ID="txtb_Email" runat="server"></asp:TextBox>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Phone: "></asp:Label>
<asp:TextBox ID="txtb_Phone" runat="server"></asp:TextBox>
<br />
<asp:Button ID="submitButton" runat="server" Text="Submit" />
</div>
</form>
</body>
</html>
index.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ProjectPhase02
{
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session[Constants.firstName] = txtb_FName.Text;
Session[Constants.lastName] = txtb_LName.Text;
Session[Constants.userName] = txtb_UName.Text;
Session[Constants.password] = txtb_Password.Text;
Session[Constants.address] = txtb_Address.Text;
Session[Constants.email] = txtb_Email.Text;
Session[Constants.phoneNumber] = txtb_Phone;
}
}
}
Constants.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace ProjectPhase02
{
public static class Constants
{
public static string firstName = "thatFName";
public static string lastName = "thatLName";
public static string userName = "thatUName";
public static string password = "thatPass";
public static string address = "thatAddress";
public static string email = "thatEmail";
public static string phoneNumber = "thatPNumber";
}
}
accountCreationConfirmation.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ProjectPhase02
{
public partial class accountCreationConfirmation : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string fN = (string) Session[Constants.firstName];
string lN = (string) Session[Constants.lastName];
string uN = (string) Session[Constants.userName];
string pW = (string) Session[Constants.password];
string ad = (string) Session[Constants.address];
string em = (string) Session[Constants.email];
string pN = (string) Session[Constants.phoneNumber];
lbl_FName.Text = fN;
lbl_LName.Text = lN;
lbl_UName.Text = uN;
lbl_Password.Text = pW;
lbl_Address.Text = ad;
lbl_Email.Text = em;
lbl_Phone.Text = pN;
}
}
}
accountCreationConfirmation.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="accountCreationConfirmation.aspx.cs" Inherits="ProjectPhase02.accountCreationConfirmation" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Project Phase 02</title>
<link id="Link1" href="main.css" rel="stylesheet" runat="server" />
</head>
<body>
<form id="form1" runat="server" >
<div>
<asp:Label CssClass="accountFormLable" runat="server" Text="First Name: "></asp:Label>
<asp:Label ID="lbl_FName" runat="server"></asp:Label>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Last Name: "></asp:Label>
<asp:Label ID="lbl_LName" runat="server"></asp:Label>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="User Name: "></asp:Label>
<asp:Label ID="lbl_UName" runat="server"></asp:Label>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Password: "></asp:Label>
<asp:Label ID="lbl_Password" runat="server"></asp:Label>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Address: "></asp:Label>
<asp:Label ID="lbl_Address" runat="server"></asp:Label>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Email: "></asp:Label>
<asp:Label ID="lbl_Email" runat="server"></asp:Label>
<br />
<asp:Label CssClass="accountFormLable" runat="server" Text="Phone: "></asp:Label>
<asp:Label ID="lbl_Phone" runat="server"></asp:Label>
<br />
</div>
</form>
</body>
</html>
main.css
.accountFormLable {
width: 100px;
float: left;
display: block;
clear: left;
}
Комментарии:
1. Когда вы отлаживаете это, где конкретно теряется значение? Кажется действительно странным захватывать значения текстового поля
Page_Load
. Вы уверены, что не переписываете значение новым пустым значением, снова загружая страницу или что-то в этом роде?2. @EdPlunkett Я подумал, что это может быть проблемой, я также попытался добавить OnClick «Событие» к кнопке, но кажется, что формы «Действие» пропускают этот OnClick даже полностью. Если я установлю точку останова при нажатии с именем «submitButton_Click», она никогда не достигнет этой точки останова. Поэтому я не уверен, что нужно было вводить код.
protected void submitButton_Click(object sender, EventArgs e) { Session[Constants.firstName] = txtb_FName.Text; }
3. @Ed Если я жестко закодирую значение
PageLoad
, оно будет передано на вторую страницуPageLoad
. >>Session[Constants.firstName] = "TestFirst";
4. @JordanWalker Пожалуйста, направьте эти комментарии Дэвиду, с которым вы на самом деле разговариваете. Все, что я сделал, это исправил ваши теги.
5. @David youtube.com/watch?v=QD8SVtd4enYamp;feature=youtu . в примере Suzuki он жестко кодирует некоторые значения для сеанса в событии загрузки страницы. Это нормально для простой передачи статической информации, но я хочу передавать значения из формы, которую я создал в Phase01. «TestFirst» — это жестко закодированное имя, полезное для тестирования. Я попытался настроить кнопку для события Onclick, но, похоже, OnClick даже никогда не срабатывает. Я ввожу перерыв для отладки, он никогда не запускает эту точку останова, пропуская код. Жесткое кодирование — единственный способ, которым я пока смог передать что-либо с помощью сеанса.