2009-08-26 4 views
0

更新パネルを使用してページの一部を非同期に更新しています。マルチビューのアクティブなインデックスが変更されると、そのナビゲーションを登録する必要があります。ページが最初にロード、= 0 マルチビューアクティブなインデックスは、ユーザーがリンクをクリックすると、私はビューのインデックス1マルチビューの履歴エントリ(戻る/進む)を登録するにはどうすればいいですか(アクティブなインデックスの変更)

の内容を表示し、ユーザーを許可するように本当に重要である。例えば

、ブラウザの履歴を使用して前後に移動します。

ScriptManagerは、マスターページにあり、EnableHistoryプロパティはTrueに設定されています。

マルチビューを使用しているときに誰かがそれを実装していますか?

答えて

2

これはうまくいくはずですが、少しカスタマイズする必要があります。私は非常に似たようなことをやっていますが、私はそこに埋め込まれたサードパーティのコントロールに問題があるため、アップデートパネル内でマルチビューを使用しなくてはなりませんでした。

下記のasp.netタグを使用して、aspxファイルのマスターページへの参照を追加する必要があります。また、スクリプト・マネージャーをマスター・ページのパブリック・コントロールとして公開し、イベントをそれに接続することもできます。

あなたのページのデザイン/ htmlコードで:マスターへの仮想パスを更新するか、タイプを使用してタイプリファレンスを割り当ててください。あなたのページのinitイベントで

<%@ MasterType VirtualPath="~/MasterPage.master" %> 

public void Page_Init(object sender, EventArgs e) 
{ 
    // can be done at MasterPage level if you like 
    this.Master.ScriptManager.EnableHistory = true; 
} 

次に、ページのロードイベントで:

protected void Page_Load(object sender, EventArgs e) 
{    
    this.Master.ScriptManager.Navigate += 
    new EventHandler<HistoryEventArgs>(ScriptManager_Navigate); 

    if (!this.IsPostBack && !ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
    { 
     // load default multiview index 
    }   
} 

次に、あなたのページにこの新しいイベントハンドラを追加します。これはアイテム "myArgs"に名前を付けます。あなたのコンテンツにもう少し直感的なものを使うべきです。私の実装では、並べ替え順序やページインデックスなどの一連の項目がdelimで区切られており、それらを分割して割り当てます。

protected void ScriptManager_Navigate(object sender, HistoryEventArgs e) 
{ 
    if (!string.IsNullOrEmpty(e.State["myArgs"])) 
    { 
     string args = e.State["myArgs"]; 
     SetMyArgs(args);       
    } 
    else 
    { 
     // just load default 
    } 
} 

argsはマルチビューインデックスになります。これらは私が使うヘルパー関数です。インデックスだけが気になるアイテムなら、これらの呼び出しをメインメソッドにインライン展開することができます。その後

private void SetMyArgs(string args) 
{ 
    int myIndex = int.Parse(args); 
    // set multiview index here? 
} 

private string GetMyArgs() 
{ 
    return myMultiview.ActiveIndex.ToString(); 
} 

アクティブ率を変化させるイベントをトリガ、これらのメソッドにこれを追加し

if (this.IsAsync) 
{ 
    this.Master.ScriptManager.AddHistoryPoint("myArgs", GetMyArgs()); 
} 

うまくいけば、これはあなたにいくつかの助けを与えます。

+0

こんにちはジム ありがとうございました。 Josi –

0

ではなく、 ScriptManager.GetCurrent(Page).IsInAsyncPostBack(またはお客様の場合はthis.Master.ScriptManager.IsInAsyncPostBack)を使用しないでください。

関連する問題