在页面之间传递多个变量并使用它们
本文关键字:变量 之间 | 更新日期: 2023-09-27 18:30:12
我有三个变量试图从一个页面传递到另一个页面:两个复选框列表(仅检查值)和一个DateTime。
我得到了这样的复选项(这只是其中一个名为lstUsers的复选框列表):
string cblvalues = "";
foreach (ListItem cbitem in lstUsers.Items)
{
if (cbitem.Selected)
{
cblvalues += cbitem.Value + "-";
}
}
cblvalues = cblvalues.Trim('-');
Response.Redirect("Results.aspx?cblvalues=" + cblvalues);
如何将其他复选框列表和DateTime也传递到"Results.aspx"?我看到了一些不同的例子,比如Server.Transfer,我不确定这里哪一个是正确的。
如果要在Results.aspx页面上使用它们,我会不会只做:
string cblvalues = Request.QueryString["cblvalues"];
您可以在查询字符串中放入任意多个值。(尽管当查询字符串变得非常长时,web服务器最终会施加限制。)在这里,您只需附加一个键/值对:
Response.Redirect("Results.aspx?cblvalues=" + cblvalues);
只需使用&
来分离额外的密钥/值对:
Response.Redirect("Results.aspx?cblvalues=" + cblvalues + "&moreValue=" + moreValues);
如果查询字符串变得长得离谱,并且基本上有很多数据要传递到下一页,那么您应该考虑其他方法。一个简单的替代方案可能是将值存储在会话状态中,重定向用户,然后从会话状态中提取值。像这样简单的东西:
Session["cblvalues"] = cblvalues;
Session["moreValues"] = moreValues;
Response.Redirect("Results.aspx");
然后在Results.aspx
中,您可以获得以下值:
var cblValues = Session["cblvalues"];
// etc.
如果会话不需要继续携带它们,您也可以在获得会话值后清除它们:
Session.Remove("cblvalues");
您可以通过查询字符串传递多个值,方法是用&
分隔它们因此,您的代码片段如下所示:则设CCD_ 4为第二个CCD_;
// 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
Response.Redirect(String.Format("Results.aspx?value1={0}&value2={1}&value3={2}", Value1, Value2, Value3));
如果你真的想用querystring传递它们,那么你必须包括它们以及
Response.Redirect("Results.aspx?cblvalues=" + cblvalues + "&cblvalues1=" + cblvalues + "&datetimemy=" + datetimevalue);
类似以下的查询字符串的形式
http://server_name/path/aspxfile?field1=value1&field2=value2&field3=value3..&fieldn=valuen
正如另一个答案所提到的,有多种方法,如使用Session
或cookies
,或者您也可以将这些控件值公开为公共属性,然后在下一页中使用Page.PreviousPage
属性,但限制是您必须使用Server.Transfer()
或Server.Execute()
方法之一,而不是Response.Redirect
。