2016-07-24 3 views
0

한 페이지에서 텍스트 상자의 변수를 가져온 다음 다른 페이지에 표시되도록 변수를 전달하려고합니다. 세션을 사용해야하는 것처럼 보입니다. (이 과제는이 과제를위한 주제 였기 때문입니다.) 주석 처리 된 코드는 시도하지 않은 다양한 방법입니다. 시작 페이지에서다른 웹 페이지로 변수 전달하기

:

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" /> 

가 확인하거나하지시겠습니까 :

+0

디버깅하려면, 단지 페이지 하나를 Page_Load 내부 세션 중 하나를 하드 코딩보십시오. 예 : 'Session [ "test"] = "Hello"'그런 다음 2 페이지에서 다시 page_load에서'Response.Write (Session [ "test"]); – Delosdos

+0

Jaqueline 사이트에 오신 것을 환영합니다. 나는 당신의 제목에서 핵심 단어를 제거했습니다 - 그것은 태그 섹션을위한 것입니다. [어떤 세션 모드] (http://stackoverflow.com/search?q=%5Basp.net%5D+session+mode) 설정 했습니까? – slugster

+0

안녕하세요 재클린,이 답변이나 질문에 대한 답변이 있으면 [확인] (http://meta.stackexchange.com/q/5234/179419)을 클릭하여 확인하십시오. 이는 해결책을 찾았으며 응답 한 사람과 자신에게 모두 평판이된다는 것을 더 넓은 커뮤니티에 나타냅니다. 이를 수행 할 의무는 없습니다. – Seany84

답변

관련 문제