2010-07-27 44 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