2010-07-27 74 views
0

我試圖從源頁面將選定的ID號碼發佈到新的目標頁面(彈出窗口)並在該頁面上顯示更多詳細信息。從Gridview將新值發佈到新窗口Selected列

我使用了各種解決方案,但看起來像他們有點過時。 這是我的問題:

什麼是最好的方式發佈它(session?cookie?)或Page.PreviousPage.FindControl?或者添加一個控件到<ItemTemplate>?或Javascript?

我不想使用查詢字符串,因爲我不希望用戶手動修改它。

我應該在目標頁面上寫什麼來獲取該值?

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string testID= GridView1.SelectedRow.Cells[3].Text; 
    // eg. Session["ID"] = testID; 

    //eg. open new pop up window ("target.aspx"); 
} 

許多THX

回答

0

雖然您可以將選定的值存儲在會話變量或跨頁面回發中,但我首選的方法和整體標準方法是使用簡單的查詢字符串值。

1)獲取值並重定向到所需的ID。

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
    {  
     var testID = gridView1.SelectedRow.Cells[3].Text; 
     Response.Redirect("target.aspx?Id=" + Server.UrlEncode(testID)); 
    } 

2)在 「target.aspx」 頁面上,從URL( 「http://localhost/target.aspx?Id=125」)

protected void Page_Load() 
    { 
     if (!IsPostBack) 
     { 
      var querystringValue = Request.QueryString["Id"]; 
      if (!string.IsNullOrEmpty(querystringValue)) 
      { 
       // do something. 
      } 
     } 
    } 

Passing variables between pages using QueryString.

編輯加載值:雖然我不會做這樣的事情(我喜歡讓我的網站儘可能無狀態),同樣的原則適用於會話變量。

protected void Page_Load() 
    { 
     if (!IsPostBack) 
     { 
      var sessionValue = Session["Id"]; 
      if (!string.IsNullOrEmpty(sessionValue)) 
      { 
       // do something. 
      } 
     } 
    } 

這就是說,我不明白querystrings有什麼問題。當然,用戶可以對其進行修改並插入虛假值,但這正是您的服務器端驗證到位的地方。嘿,如果谷歌使用querystrings,他們不可能是那麼糟糕。

+0

OP說:「我不想使用查詢字符串,因爲我不想用戶手動修改它。」 – Marko 2010-07-27 03:01:13

+0

@Marko沒有看到那句話。我已經編輯了我的帖子,包括使用會話變量做同樣的事情。 – rebelliard 2010-07-27 04:07:43

+0

以及對查詢字符串..我想我會採取查詢字符串的解決方案。 thx – Kiddo 2010-07-27 06:22:45

0

你試過Cross Page Postback?這聽起來就是你想要的。

+0

Cross Page Postback在同一窗口下,不是嗎?我想彈出一個新窗口 – Kiddo 2010-07-27 03:59:02