现在我将消息数组作为查询字符串发送到另一个页面。但是当我抓住下一页时,我们知道了arr.Length(通常它显示了intellisense),但在这种情况下它没有显示。
这里是msg_arr传递给另一个页面
private void check(string keyword , params Array[] msg_arr)
{
switch (keyword.ToUpper())
{
case "SETTELG":
Response.Redirect("../SMSFunction/SeenSMS.ascx?value=1&arr" + msg_arr);
break;
下面的代码是下一页我想要捕捉到的价值&数组(msg_arr)。但长度不起作用
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string Moose = Request.QueryString[1];
}
if (msg_arr != null)
{
if ((msg_arr.Length == 3) && (msg_arr[1].ToLower() == "slett"))
{
}
}
}
这里是第二个代码截图,你可以看到长度未显示
答案 0 :(得分:3)
这里有点不对劲。
private void check(string keyword , params Array[] msg_arr)
这个函数真的是否传递了Array
s的数组?我认为string[]
或object[]
可能是可能的类型。
Response.Redirect("../SMSFunction/SeenSMS.ascx?value=1&arr" + msg_arr);
那将在ToString()
上调用msg_arr
,这是一个数组,会产生如下结果:
"../SMSFunction/SeenSMS.ascx?value=1&arrSystem.Array[]"
Array
不会覆盖ToString()
,因此您从Object
获取一个输出该类型的完全限定名称的名称 - 我认为这不是您想要的名称。< / p>
最后,我们会找到您的第二段代码,但您甚至没有向我们展示任何尝试设置新msg_arr
变量的代码。但是它无法获得msg_arr
的原始值,因为你还没有通过它。
您需要决定如何将数组打包到查询字符串中。例如,如果msg_arr
应该是一组可读字符串(params string[] msg_arr
定义中的check
),那么您可能会尝试以下内容:
Response.Redirect("../SMSFunction/SeenSMS.ascx?value=1&arr=" + string.Join("|",msg_arr));
其中|
是不应出现在传递的字符串中的字符。 (String.Join
)
然后,您可以使用以下内容将其重新构建为数组:
protected void Page_Load(object sender, EventArgs e)
{
string[] msg_arr = Request.QueryString["arr"].Split('|');
/* rest of method */
当然,如果字符串的长度(或它们的数量)太大,可能会有一个问题,根本不可能通过查询字符串传递它们。
答案 1 :(得分:1)
您无法在查询字符串中传递整个集合。你唯一能做的就是传递一个集合元素。即数组不能传递但是array [0] .toString()可以传递。请通过会话变量以简单的方式完成。将数组存储在Page1.aspx中的Session变量中,并在Page2.aspx上检索。示例代码如下
Page1.aspx
protected void Page_Load(object sender, EventArgs e)
{
int[] array = { 1, 2, 3, 4, 5 };
Session["Array"] = array; Response.Redirect("About.aspx");
}
Page2.aspx
protected void Page_Load(object sender, EventArgs e)
{
int[] array;
if (Session["Array"] != null)
{
array = (int[])Session["Array"];
if (array.Length == 3)
{
/////implementaion
}
}
}