2014-01-14 54 views
0

我試圖製作一個腳本來檢查用戶在加入團隊之前是否具有適當的年齡。如果用戶年齡與團隊年齡不符,那麼腳本應停在此頁面,並要求用戶單擊「BackToLastPageBtn」按鈕返回上一頁,該頁面使用名爲「BackToLastPage」的變量,該變量獲取其來自'Session [「currentUrl」]'的值,在Page_load被重置之前。 問題是,單擊按鈕時它告訴我該值爲空。 我不知道爲什麼它是空的,當我將值添加到「BackToLastPage」,在重置會話[「currentUrl」]之前。我希望有人能告訴我,引導我朝着正確的方向前進。從會話變量定義變量並將其添加到變量

代碼隱藏 - 腳本

public partial class JoinTeam : System.Web.UI.Page 
{ 
    //Defining Go back variable 
    private string BackToLastPage; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     int BrugerId = Convert.ToInt32(Session["BrugerId"]); 
     int TeamId = Convert.ToInt32(Request.QueryString["HoldId"]); 

     //Adding value to go back variable from sessionurl 
     BackToLastPage = (string)Session["CurrentUrl"]; 

     //Resets sessionurl. 
     Session["CurrentUrl"] = null; 

     if (Session["brugerId"] != null) 
     { 

      if (ClassSheet.CheckIfUserAgeMatchTeamAge(BrugerId, TeamId)) 
      { 
       ClassSheet.JoinATeam(BrugerId, TeamId); 

       if (BackToLastPage != null) 
       { 
        //Uses the new savedUrl variable to go back to last page. 
        Response.Redirect(BackToLastPage); 
       } 
       else 
       { 
        Response.Redirect("Default.aspx"); 
       } 
      } 

      else 
      { 
       AgeNotOk.Text = "Du har ikke den rigtige alder til dette hold"; 
      } 
     } 
     else 
     { 
      //Not saving last page. Need to find solution. 
      Response.Redirect("Login.aspx"); 
     } 
    } 

    //NOT WORKING... 
    protected void BackToLastPageBtn_Click(object sender, EventArgs e) 
    { 
     //Go back button 

     //Response.Write(BackToLastPage); 
     Response.Redirect(BackToLastPage); 
    } 
} 

Error Message

+0

我要補充,我試圖註釋掉整個腳本,並添加「的Response.Write((字符串)會議[」 CURRENTURL「])在Button_Click方法,它寫出來的在頁面右邊的URL,所以我覺得它與pageLoad上的新變量「BackToLastPage」有關,但我不知道如何解決它,因爲它對我來說似乎是邏輯的,就像我做的那樣。 – chmodder

+0

按鈕點擊是否可能通過傳遞頁面加載事件?試着改變你的私有變量爲:private string BackToLastPage {get {return if(Session [「CurrentUrl」] == null)return「」else return Session [「CurrentUrl」]。ToString(); }} – user2453734

+0

現在我只是得到一個網頁說:對象移動到**這裏**。 – chmodder

回答

1

既然你是在Page_Load中設置會話[ 「CURRENTURL」]爲空。當事件被解除時,它不再存在。以下是我得到它的代碼。由於我沒有定義所有類,所以我不得不刪除一些代碼。私人財產不會通過回傳持續。如果您希望它按照您的方式工作,則應將previoius網址保存在頁面本身的隱藏字段中。

壹:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Session["CurrentUrl"] = Request.Url.ToString(); 
     Response.Redirect("~/SecondPage.aspx"); 
    } 

第二頁:

private string BackToLastPage { get { return (Session["CurrentUrl"] == null) ? "" : Session["CurrentUrl"].ToString(); } } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     int BrugerId = Convert.ToInt32(Session["BrugerId"]); 
     int TeamId = Convert.ToInt32(Request.QueryString["HoldId"]); 

     if (Session["brugerId"] != null) 
     { 
      //CUT CODE OUT DONT HAVE YOUR DEFINITIONS 
      Response.Write("brugerid was not null"); 
     } 
    } 

    protected void BackToLastPageBtn_Click(object sender, EventArgs e) 
    { 
     //YOU SHOULD SET THE CURRENT URL TO NULL HERE. 
     string tempUrl = BackToLastPage; 
     Session["CurrentUrl"] = null; 
     Response.Redirect(tempUrl); 
    } 

你也可以試試這個,在hiddenfield存儲返回URL,僅設置它,如果它不是一個網頁提交:

標記HTML:

<form id="form1" runat="server"> 
<div> 
    <asp:Button ID="btnOne" runat="server" OnClick="BackToLastPageBtn_Click" Text="Button One" /> 
    <asp:HiddenField ID="hfPreviousUrl" runat="server" /> 
</div> 
</form> 

代碼背後:

private string BackToLastPage //THIS WILL NOW PERSIST POSTBACKS 
    { 
     get { return hfPreviousUrl.Value; } 
     set { hfPreviousUrl.Value = value;} 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if(!Page.IsPostBack)//THIS PREVENTS THE VALUE FROM BEING RESET ON BUTTON CLICK 
      BackToLastPage = (string)Session["CurrentUrl"]; 

     int BrugerId = Convert.ToInt32(Session["BrugerId"]); 
     int TeamId = Convert.ToInt32(Request.QueryString["HoldId"]); 

     //Resets sessionurl. 
     Session["CurrentUrl"] = null; 

     if (Session["brugerId"] != null) 
     { 
      Response.Write("brugerID was not null"); 
     } 
     else 
     { 
      //REMOVED FOR TEST PURPOSES 
      //Response.Redirect("Login.aspx"); 
     } 
    } 

    protected void BackToLastPageBtn_Click(object sender, EventArgs e) 
    { 
     Response.Redirect(BackToLastPage); 
    } 
+0

我確實嘗試了你的第一個答案(在編輯之前)。它工作,只要我沒有把這一行放在buttonClick中: Session [「CurrentUrl」] = null; – chmodder

+0

在將會話值更新爲空之前,使用臨時字符串存儲值更新了第一個答案。 – user2453734

+0

但隨後嘗試刪除原代碼中的同一行(以及您的第一個建議)。相同的結果:按鈕的工作。所以我想這是會議重置,使麻煩。我還沒有嘗試過你的第二個建議。順便說一句。我想我需要做一些關於隱藏領域的閱讀,因爲這是一個我一無所知的話題。 :) – chmodder