한 페이지에서 텍스트 상자의 변수를 가져온 다음 다른 페이지에 표시되도록 변수를 전달하려고합니다. 세션을 사용해야하는 것처럼 보입니다. (이 과제는이 과제를위한 주제 였기 때문입니다.) 주석 처리 된 코드는 시도하지 않은 다양한 방법입니다. 시작 페이지에서다른 웹 페이지로 변수 전달하기
:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
UnobtrusiveValidationMode = System.Web.UI.UnobtrusiveValidationMode.None;
}
//This is a button link that sends to the next page, "Results"
protected void cbtnlSubmit_Click(object sender, EventArgs e)
{
string sName = "";
int sSize = 0;
string sTopping = "";
decimal sPrice = 0M;
if (IsPostBack)
{
Validate();
if (IsValid)
{
sName = ctbName.Text;
sSize = Convert.ToInt32(ctbSize.Text);
sTopping = ctbTopping.Text;
sPrice = Convert.ToDecimal(ctbPrice.Text);
if (string.IsNullOrEmpty(sTopping) == true)
{
sTopping = "cheese";
}
/* DOESN'T WORK
Session.Add(sName, sSize);
Session.Add(sTopping, sPrice);
Server.Transfer("Results.aspx");
*/
/*DOESN'T WORK
Session["pizza"] = new Pizza()
{
name = sName,
size = sSize,
topping = sTopping,
price = sPrice
};
*/
//ALSO DOESN'T WORK
Session["name"] = sName;
Session["size"] = sSize;
Session["topping"] = sTopping;
Session["price"] = sPrice;
Response.Redirect("Results.aspx");
}
}
}
}
이 변수
두 페이지가 표시public partial class Results : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session.Count != 0)
{
lblName.Text = Session["name"].ToString();
string size = Session["size"].ToString();
string topping = Session["topping"].ToString();
string price = Session["price"].ToString();
string pizzaInfo = (size + " inch pizza with " + topping + " for $" + price.ToString());
lblPizzaInfo.Text = pizzaInfo;
/*
string name = Session.Keys[0];
int size = Convert.ToInt32(Session[name]);
string topping = Session.Keys[1];
decimal price = Convert.ToDecimal(Session[topping]);
string pizzaInfo = (size.ToString() + " inch pizza with " + topping + " for $" + price.ToString());
lblName.Text = name;
lblPizzaInfo.Text = pizzaInfo;
*/
}
lblName.Text = "Meaghan";
}
}
를 표시한다 "결과"페이지입니다. 보조 페이지의 끝에있는 lblName.Text는 레이블이 표시되는지 확인하는 테스트이지만 보조 페이지로 전달되는 정보는 없습니다. 이 레이블은 if 문 외부에 놓으면 표시됩니다. if 문 내부는 아무것도 실행되지 않습니다. 나는 권장 질문을 읽으려고 시도하고 "sessionState"를 활성화해야한다는 것을 알았지 만, 두 페이지에서 모두 수행했지만 프로그램은 여전히 작동하지 않습니다.
속성에서 EnableSessionState를 True로 선택한 다음 aspx 파일의 맨 위에 EnableSessionState = "True"라고 말합니다. web.config 파일에 추가했습니다. 그래서 나는 세션 상태 모드가 "InProc"모드라고 생각합니까?
세션 [ "test"] = "Hello"를 기본 페이지에 추가하고 Response.Write (Session [ "test"])를 결과 페이지에 추가하려고 시도했습니다. 이제는 lblName.Text = Session [ "name"]. ToString() [if 문 내부]에서 NullReferenceException을 발생시킵니다. 당신이 당신의 설정 파일에이 항목이있는 경우
<sessionState mode="InProc" cookieless="false" timeout="10" />
가 확인하거나하지시겠습니까 :
디버깅하려면, 단지 페이지 하나를 Page_Load 내부 세션 중 하나를 하드 코딩보십시오. 예 : 'Session [ "test"] = "Hello"'그런 다음 2 페이지에서 다시 page_load에서'Response.Write (Session [ "test"]); – Delosdos
Jaqueline 사이트에 오신 것을 환영합니다. 나는 당신의 제목에서 핵심 단어를 제거했습니다 - 그것은 태그 섹션을위한 것입니다. [어떤 세션 모드] (http://stackoverflow.com/search?q=%5Basp.net%5D+session+mode) 설정 했습니까? – slugster
안녕하세요 재클린,이 답변이나 질문에 대한 답변이 있으면 [확인] (http://meta.stackexchange.com/q/5234/179419)을 클릭하여 확인하십시오. 이는 해결책을 찾았으며 응답 한 사람과 자신에게 모두 평판이된다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. – Seany84