在页面之间传递多个变量并使用它们

本文关键字:变量 之间 | 更新日期: 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

正如另一个答案所提到的,有多种方法,如使用Sessioncookies,或者您也可以将这些控件值公开为公共属性,然后在下一页中使用Page.PreviousPage属性,但限制是您必须使用Server.Transfer()Server.Execute()方法之一,而不是Response.Redirect