2016-01-13 66 views
1

我有三个变量,我试图从一个页面传递给另一个:两个checboxlists(只是选中的值)和一个DateTime。在页面之间传递多个变量并使用它们

,我发现了检查的项目是这样的(这仅仅是这些checkboxlists被称为lstUsers之一):

string cblvalues = ""; 

    foreach (ListItem cbitem in lstUsers.Items) 
    { 
     if (cbitem.Selected) 
     { 
      cblvalues += cbitem.Value + "-"; 
     } 
    } 
    cblvalues = cblvalues.Trim('-'); 
    Response.Redirect("Results.aspx?cblvalues=" + cblvalues); 

我怎么会通过其他的CheckBoxList和日期时间为“Results.aspx “以及?我见过一些不同的例子,比如Server.Transfer,我不确定哪一个是正确的。

而且使用它们的Results.aspx页面上,将我只是做:

string cblvalues = Request.QueryString["cblvalues"]; 
+0

你是否试图让它们在href中的所有查询字符串? – KratosMafia

回答

3

只要你喜欢上的查询字符串你可以把尽可能多的价值。 (虽然作为查询字符串得到很长网络服务器最终会加以限制。)在这里,您只需添加一个键/值对:

Response.Redirect("Results.aspx?cblvalues=" + cblvalues); 

只需使用一个&到单独的附加键/值对:

Response.Redirect("Results.aspx?cblvalues=" + cblvalues + "&moreValue=" + moreValues); 

如果你得到的地步查询字符串变成荒谬长,你基本上数据的大量传递到下一个页面,那么你正在寻找其他方式来做到这一点。一个简单的选择可能是将值存储在会话状态中,重定向用户,然后从会话状态中提取值。事情如此简单:

​​3210

然后在Results.aspx你可以得到的值:

var cblValues = Session["cblvalues"]; 
// etc. 

您也可以清除会话值,一旦你得到他们,如果会议没有需要保留携带他们:

Session.Remove("cblvalues"); 
+0

这样做和D Mayuri回答的String.Format方式有什么不同吗? – pfinferno

+0

@pfinferno:不是,这只是使用你已经使用的字符串构建方法。得到的字符串不会有差别,但'strinig.Format()'通常是构建字符串的首选。 – David

2

您可以用& 分隔他们,让您的片段就会像下面通过查询字符串多个值: 然后让cblSecond成为第二个combobox;

// Building first value here 
foreach (ListItem cbitem in cblSecond.Items) 
    { 
     if (cbitem.Selected) 
     { 
      cblSecondValues += cbitem.Value + "-"; 
     } 
    } 
Response.Redirect("Results.aspx?cblvalues=" + cblvalues + "&cblSecondValues=" + cblSecondValues); 

这样就可以分别访问他们像这样:

string cblvalues = Request.QueryString["cblvalues"];// gives you the first value 
string cblSecondValues= Request.QueryString["cblSecondValues"];// gives you the second value 
1
Response.Redirect(String.Format("Results.aspx?value1={0}&value2={1}&value3={2}", Value1, Value2, Value3)); 
1

如果你真的想使用的查询字符串,那么你ahouls包括通过他们米以及

Response.Redirect("Results.aspx?cblvalues=" + cblvalues + "&cblvalues1=" + cblvalues + "&datetimemy=" + datetimevalue); 

查询字符串的形式像下面

http://server_name/path/aspxfile?field1=value1&field2=value2&field3=value3..&fieldn=valuen 

正如其他答复中提到,有很多种方法如使用Sessioncookies或者也可以揭露那些控制值的公共属性然后在下一页使用Page.PreviousPage属性,但限制是您必须使用Server.Transfer()Server.Execute()方法中的任一个,而不是Response.Redirect