0

問題が発生しましたが、まだ解決策を見つけることができませんでした。少し単純化させてください。

2つのフォームがあります。最初のフォームには、複数選択モードが有効になっているASPリストボックスが含まれています。フォームを送信し、テスト目的で使用する他のフォームでこのコードスニペットを送信します。

protected void Page_Load(object sender, EventArgs e)
    {
        foreach (string formKey in Request.Form.AllKeys)
        {
            if (formKey != null)
            {
                if (formKey.Equals("ctl00$MainContent$ListBox1"))
                    Label1.Text = Request.Form[formKey];
            }
        }  
    }

問題は、リストボックスからの値(前のフォームで選択した値)が「、」で区切られていることです。「test1、test2、test3」。たとえば、このセパレータを「$」に​​変更するにはどうすればよいですか?実際の値には「、」が含まれている可能性があり、リストボックスに手動でフィードしないため、変更する必要があります。

アプリケーション全体がこのモデルを使用しているため、フォーム間でこの値を転送する他のモードを使用することはできません。次に、取得した値がワークフローに送信され、そこで操作されます。ワークフローでは、各リストボックスアイテムの開始位置と終了位置を知る必要があるため、一意の区切り文字である必要があります。

どんな助けでもありがたいです!どうもありがとうございます


MatteKarlaに感謝しますが、残念ながらこれでは私の問題は解決しません。はい、これはあるフォームから別のフォームに値を転送するための良い方法です。

ただし、リストボックスは実行時に生成され、この値を受け取るワークフローメソッドに値が送信される他の多くの「パラメーター」の1つであるため、リクエストフォームキーで上記の方法を使用する必要があります。そして、私のアプリケーションでそれを変更する余裕はありません。

私の問題は、coma( " ,")区切り文字が、複数選択リストボックスでデフォルトで使用されていることです。

値自体にもコマが含まれている可能性があり、混乱を招くため、そのセパレータをコマから別の文字に変更する方法があるのではないかと思いました。

私が言ったように、3つの値test1とを選択するtest2test3、私のメソッドの結果はのような文字列になります"test1,test2,test3"。ただし、aの"test1$test2$test3"方がはるかに優れています。

しかし、このデフォルトのセパレーターを変更することは不可能だと私は心配しています。リストボックスに値から意図したすべてのコマをフィードする前に、混乱を引き起こさないように他の文字で置き換えるなど、この問題を克服する方法を考えなければなりません。しかし、これはそれを行うための優れた方法ではありません。

4

1 に答える 1

0

最初のページ/フォーム ( First.aspx.cs) で、リストボックスを使用してパブリック プロパティを作成します。

public ListBox PostedListBox { get { return ListBox1; } }

ボタンのポストバック URL を Second.aspx に設定します。

@Page-ディレクティブ追加後の aspx ファイルの 2 ページ目:

<%@ PreviousPageType VirtualPath="~/First.aspx" %>

次に、値Form_LoadSecond.aspx.cs抽出できます。

if (PreviousPage != null)
{
    ListBox postedListbox = PreviousPage.PostedListBox;
    foreach (var index in postedListbox.GetSelectedIndices())
    {
        var itemText = postedListbox.Items[index].Text;
    }
}

または、次を使用してコントロールを見つけようとすることもできます。

if (PreviousPage != null)
{
  var control = PreviousPage.FindControl("ListBox1") as ListBox;
}

3 番目の編集:

GetValues を使用できます。

Request.Form.GetValues("ctl00$MainContent$ListBox1");

選択された各項目を含む文字列配列を返します。

于 2011-09-19T22:33:32.773 に答える