私はMVVMを使用しているプロジェクトのソリューションを見つけられなかったので、私は助けが必要です。 私は、2つのユーザーコントロールを持つUpdatePanelを含むDefault.aspxを持っています。最初のコントロールはフィルタリングするフィールドがあるFilterControlです。 2番目のコントロールは、FilterControlでボタンの検索を押すと、データベースのページングを許可し、データを取り込むGridViewです。クエリが100個のレコードを返すとします。ですから、PageSizeを20の結果に設定すると、GridViewに5ページありますか?リストに戻る前へ次へ.NETでの制御
一方、私は、GridViewからアイテムのIdパラメータを受け取り、それに関する情報を示すFormViewを持つ詳細ページを持っています。 aspのすぐ上に:FormViewのコード私は、セッション変数内の対応するViewModelを介してgridviewからデータをフィルタリングし、次のと前にする必要があるアイテムを計算する別のユーザーコントロールを持っているので、 "リストに戻る" 「前の」リンクと「次の」リンク。前と次のリンクが正しくロードされます。 Response.Redirect(PrevLink)を行うOnClickイベントを持つLinkButtonです。たとえば、PrevLinkはページが〜/ details.aspx?Id = 5にリダイレクトされるリンクです。
私はeventHandlerとHistoryEventArgs全体で非同期的にナビゲーションを制御していますので、ブラウザの[戻る]ボタンを押すとすべてが正常でdefault.aspxページで目的の結果が得られます。たとえば、gridviewのページインデックスを変更する、またはフィルタで新しいクエリを実行するときに、私はScriptManagerのAddHistoryPointを呼び出し、いくつかのキーと値を保存します(フィルタフィールド、ページ数、等)。
問題は、Back to List LinkButtonを押したときに発生します。詳細ページに行く前のデータと同じであることを願っています。私はこのボタンのOnClickイベントでResponse.Redirect( "〜/ default.aspx")を持っています。
これを管理する方法はありますか?
ありがとうございます!ここ
答えからコードをコピーし
の答えをいただき、ありがとうございます。 @Guvanteクライアント側で「リストに戻す」をしたくないのは、「詳細」ページを編集するときに、ナビゲーションコントロールの可視プロパティがfalseに設定されているためです。私は自分自身を正しく表現していないと思う。しかし、私はaspxページのOnClickイベントでResponse.Redirectを持っていません。私がページのソースコードで持っているのは、OnClick = lkbBackToList_Navigateです。
私はこのように分離コードでそれを持っている:
string key = string.Format("{0}.{1}.{2}", this.GetType(), nameValue, index);
例:
protected void lkbNext_Navigate(object sender, EventArgs e)
{
Response.Redirect(NavigationViewModel.NextUrl);
}
protected void lkbPrevious_Navigate(object sender, EventArgs e)
{
Response.Redirect(NavigationViewModel.PreviousUrl);
}
protected void lkbBackToList_Navigate(object sender, EventArgs e)
{
Response.Redirect(NavigationViewModel.BackToListUrl);
}
@msarchet this is some of my code in default.aspx code behind. When I do postback I save the state of the filters, pageindex and so on in session
public event EventHandler<HistoryEventArgs> CaptureClientBrowsing;
protected void Page_OnInit(EventArgs e)
{
this.CaptureClientBrowsing += new EventHandler<HistoryEventArgs>(CaptureClientBrowsing_Event);
}
protected override void SaveDataInSession()
{
SaveInSession("FilterViewModel", this.FilteringControl.ViewModel);
SaveInSession("PageIndex", this.CurrentPageIndex); //CurrentPageIndex is a property with the page index of the gridview
}
protected void CaptureClientBrowsing_Event(object sender, HistoryEventArgs e)
{ LoadDataFromSession(e.State); //e.State is a NameValueCollection with the values stored in session for example FilterViewModel has the user control FilteringControl and "PageIndex" has the page index of the gridview ControlsDataBinding();
}
SaveInSession方法ちょうど[キー] =それは次のようにキーが文字列であるオブジェクトのセッションを維持しますキーの番号は
"ASP.customers_default_aspx.PageIndex.1"` so `Session[key]=1
グリッドの他のページ(例:ページ番号6)をクリックすると、キー変数の値を表示すると、
"ASP.customers_default_aspx.PageIndex.2"` and `Session[key]=5
ここに私は立ち往生しています。詳細ページからデフォルトページにブラウズすると、ブラウザで戻るとCaptureClientBrowsing_Event
が発生し、コントロールが正しく読み込まれ、フィルタの値も正しく読み込まれます。
私が望むのは、「リストに戻る」LinkButtonをクリックすると、コントロールとフィルターがロードされることです。履歴引数を持たない場合、NameValueCollectionを取得するにはどうすればよいですか?私が次へ3回クリックし、次にBakをクリックして、ロードするセッション値をどのように知るのですか?
おそらく、多くの質問がありますが、これは扱いが難しいかもしれませんが、私はできるだけ具体的にしようとしました。
を復元することができますが、私は、コードの一部を入れているコード – msarchet
@msarchetのいくつかを示すことができ、多分あなたは私のために – Alvmad