0

现在我将消息数组作为查询字符串发送到另一个页面。但是当我赶上下一页时,我们有一个 arr.Length 知道(通常它显示智能感知),但在这种情况下它不显示。

这是 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"))

            {

            }


        }
    }

这是第二个代码截图,你可以看到长度没有显示 这是第二个代码截图,你可以看到长度没有显示

4

2 回答 2

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()on msg_arr,它是一个数组,将产生如下结果:

"../SMSFunction/SeenSMS.ascx?value=1&arrSystem.Array[]"

Array不会覆盖ToString(),因此您可以从中获得Object输出类型的完全限定名称的名称-我认为这不是您想要的。

最后,我们到达了您的第二段代码,但您甚至没有向我们展示任何尝试设置新msg_arr变量的代码。但它无法获得 的原始值msg_arr,因为您还没有传递它。


您需要决定如何将数组打包到查询字符串中。如果,比如说,msg_arr应该是一个可读字符串数组(params string[] msg_arrcheck定义中),那么你可以尝试类似:

Response.Redirect("../SMSFunction/SeenSMS.ascx?value=1&arr=" + string.Join("|",msg_arr));

where|是不应出现在传递的字符串中的字符。( String.Join)

然后,您可以使用以下内容将其重建回数组:

protected void Page_Load(object sender, EventArgs e)
{
    string[] msg_arr = Request.QueryString["arr"].Split('|');
    /* rest of method */

( String.Split)

当然,如果字符串的长度(或字符串的数量)太大,现在可能会担心,通过查询字符串传递它们可能根本不合适。

于 2012-06-08T06:47:28.627 回答
1

您不能在查询字符串中传递整个集合。你唯一能做的就是传递一个集合元素。即 array 不能被传递,但 array[0].toString() 可以。请通过会话变量以简单的方式执行此操作。将数组存储在 Page1.aspx 的 Session 变量中并在 Page2.aspx 上检索。示例代码如下

第1页.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 
         } 
      } 
    }
于 2012-06-08T10:41:47.983 回答