3

私のasp.netページは、ユーザーが選択したレポートに基づいてさまざまなコントロールをレンダリングします.たとえば、レポートによっては5つのドロップダウンが必要で、2つのチェックボックスと6つのドロップダウンが必要です.

2 つの方法を使用してレポートを選択できます。SelectedReport=MyReportクエリ文字列を使用するか、ドロップダウンから選択します。また、クエリ文字列に SelectedReport を含むページにアクセスし、ドロップダウンで選択されたレポートを変更するのはよくあることです。

私の質問は、ドロップダウンが選択されたときにクエリ文字列を変更する方法はありますか。SelectedReport=MyNewReportしたがって、クエリ文字列とページをポストバックしたいと思います。

現時点では、通常のポストバックを実行しているだけでSelectedReport=MyReport、現在選択されているレポートでなくても、クエリ文字列に残ります。

編集:また、ViewState を保持する必要があります。

ドロップダウンのイベントハンドラーで試してみましServer.Transfer(Request.Path + "?SelectedReport=" + SelectedReport, true)たが、これは機能的に機能します。残念ながら、これは Response.Redirect ではなく Server.Transfer (ViewState を保持するため) であるため、URL は表示されているものより遅れています。

たぶん、私は不可能なことを尋ねているか、完全に間違った方法で取り組んでいます.

@Craig QueryString コレクションは読み取り専用であり、変更できません。
@Jason ViewStateを失うことを除けば、それは素晴らしいことですよね?(申し訳ありませんが、あなたの回答を見て追加しました)。

4

6 に答える 6

3

ドロップダウンの自動ポストバックをオフにする必要があります。次に、その役割を引き継ぐ JavaScript コードをいくつか接続する必要があります。ドロップダウンの onchange イベントのイベント ハンドラー コードで、現在の URL に基づいて URL を作成します。ドロップダウンから値を選択し、javascript を使用してそのページをリクエストします。

編集:これは、何がトリックを行うかを示すいくつかの迅速で汚いコードです:

<script>
    function changeReport(dropDownList) {
        var selectedReport = dropDownList.options[dropDownList.selectedIndex];
        window.location = ("scratch.htm?SelectedReport=" + selectedReport.value);
    }
</script>

<select id="SelectedReport" onchange="changeReport(this)">
    <option value="foo">foo</option>
    <option value="bar">bar</option>
    <option value="baz">baz</option>
</select>

明らかに、もう少し多くのことを行う必要がありますが、これは機能し、あなたが望んでいるように見えるものを提供します. JavaScript ツールキット (私は MochiKit を使用していますが、万人向けではありません) を使用して、より困難な作業を行うことをお勧めします。可能であれば控えめな JavaScript 手法を使用してください (この例で使用しているものとは異なります)。

@Ray: ViewState を使用しますか?! ごめんなさい。:P なぜ、この場合、それを保存する必要があるのですか? 教えてください?

于 2008-08-25T21:27:34.743 に答える
0

データが変更されたときの自動投稿の場合、ドロップダウンの「onchange」イベントのサーバー側ハンドラーを使用して、新しいクエリ文字列にリダイレクトできるはずです。ボタンの場合は、クリック イベントでサーバー側を処理します。私が話していることのサンプルを投稿しますが、私は子供たちを迎えに行く途中です.

于 2008-08-25T21:07:37.397 に答える
0

DropDown の SelectedIndexChanged で Request.QueryString[] を変更しようとしましたか? これでうまくいくはずです。

于 2008-08-25T21:09:52.290 に答える
0

ポストバック以外のクエリ文字列に基づいてドロップダウンにデータを入力し、常にドロップダウンの値を使用できます。こうすることで、ユーザーが最初にページにアクセスするとクエリ文字列に基づいて決定され、ユーザーがドロップダウンを変更すると、選択したレポートが変更されます。

于 2008-08-25T21:24:06.170 に答える
0

ビュー ステートは、同じページに対する複数のリクエストに対してのみ持続します。URL のクエリ文字列を変更すると、新しいページが要求されるため、ビュー ステートがクリアされます。

クエリ文字列パラメーターを追加することで、ビュー ステートへの依存を取り除くことは可能ですか? 次に、新しい URL を作成し、それに Response.Redirect します。

もう 1 つのオプションは、フォームのAction プロパティを使用してクエリ文字列をクリアし、ユーザーが別のレポートを選択した後にページに表示される内容と少なくともクエリ文字列が矛盾しないようにすることです。

Form.Action = Request.Path;
于 2008-08-27T05:55:37.337 に答える
0

次の関数を使用して、次のように Webresource.axd スクリプトを使用して、asp.net のポストバックでクエリ文字列を変更できます。

var url = updateQueryStringParameter(window.location.href,
                                     'Search',
                                     document.getElementById('txtSearch').value);
WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("searchbutton", "",
                                  true, "aa", url, false, true));
于 2013-06-06T17:13:03.237 に答える