2008-08-25 3 views
2

My asp.netページは、ユーザーがどのレポートを選択したかに基づいて、さまざまなコントロールをレンダリングします。いくつかのレポートには5回のドロップダウン、2回のチェックボックス、6回のドロップダウンが必要です)。ASP.NETのドロップダウンからの変更されたクエリ文字列を使用したポストバック

2つの方法でレポートを選択できます。クエリ文字列にSelectedReport=MyReportを指定するか、ドロップダウンリストから選択します。また、クエリ文字列でSelectedReportのページに来て、ドロップダウンで選択したレポートを変更するのが一般的です。

私の質問は、ドロップダウンを選択したときにクエリ文字列を変更することです。だから私はSelectedReport=MyNewReportクエリ文字列にして、ページをポストバックしたいと思います。

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

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

DropdownのイベントハンドラでServer.Transfer(Request.Path + "?SelectedReport=" + SelectedReport, true)を実行しようとしましたが、残念ながらResponse.Redirectの代わりにServer.Transfer(ViewStateを保持するため)のためURLが表示されます。

多分、私は不可能と頼んでいるか、それについて完全に間違った方法をしています。

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

答えて

0

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

1

DropDownのSelectedIndexChangedでRequest.QueryString []を修正しようとしましたか?それはトリックを行う必要があります。

0

ポストバックではないクエリ文字列に基づいてプルダウンを作成してから、常にプルダウンから値を使用できます。こうすることで、ユーザーのページへの最初の訪問はクエリー・ストリングに基づいて行われ、その後のドロップダウンの変更によって選択されたレポートが変更されます。

3

ドロップダウンの自動ポストバックをオフにする必要があります。そのロールを引き継ぐjavascriptコードをフックアップする必要があります。ドロップダウンのonchangeイベントのイベントハンドラコードでは、ドロップダウンから現在選択されている値を取得し、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を使用していますが、誰にとってもそうではありません)を使用して、もっと難しい作業をすることをお勧めします。

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

0

ビューの状態は、multiple requests for the same pageの間だけ続きます。 URLのクエリ文字列を変更すると、新しいページが要求され、ビューの状態がクリアされます。

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

フォーム上でAction propertyを使用してクエリ文字列を消去し、ユーザーが別のレポートを選択した後でもクエリ文字列がページに表示されている内容と矛盾しないようにすることもできます。

Form.Action = Request.Path; 
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));