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

            {

            }


        }
    }

これが2番目のコードのスクリーンショットです。長さが表示されていないことがわかります これが2番目のコードのスクリーンショットです。長さが表示されていないことがわかります

4

2 に答える 2

3

ここでかなり多くのことが間違っています。

private void check(string keyword , params Array[] msg_arr)

この関数は本当にs の配列を渡されていArrayますか? 私は、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最後に、コードの 2 番目の部分に到達しますが、新しい変数を設定しようとするコードさえ示していません。しかし、msg_arrまだ渡していないため、 の元の値を取得することはできません。


配列をクエリ文字列にパックする方法を決定する必要があります。たとえば、msg_arr読み取り可能な文字列の配列 (定義params string[] msg_arr内) である必要がある場合は、次のcheckようなものを試すことができます。

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[0].toString() は渡せます。セッション変数を介して簡単な方法で行ってください。Page1.aspx のセッション変数に配列を格納し、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 
         } 
      } 
    }
于 2012-06-08T10:41:47.983 に答える