0

更新パネルを使用して、ページの一部を非同期で更新しています。マルチビューがアクティブなインデックスを変更するときは、そのナビゲーションを登録する必要があります。

たとえば、ページが最初に読み込まれるとき、マルチビュー アクティブ インデックス = 0 です。ユーザーがリンクをクリックすると、ビュー インデックス 1 のコンテンツが表示されます。

ユーザーがブラウザの履歴を使用して前後に移動できるようにすることは非常に重要です。

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

マルチビューで作業するときに誰かがそれを実装しましたか?

4

2 に答える 2

2

これでうまくいくと思いますが、少しカスタマイズする必要があります。私は非常に似たようなことをしていますが、埋め込んでいたサードパーティ製のコントロールに問題があるため、updatepanel 内で multview を使用しないようにする必要がありました。

以下の asp.net タグを使用して、マスター ページへの参照を aspx ファイルに追加する必要があります。また、scriptmanager をマスター ページのパブリック コントロールとして公開して、イベントをそれに関連付けることができるようにします。

ページの design/html コード内: マスターへの仮想パスを更新するか、Type を使用して型参照を割り当てます。

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

ページの init イベントで:

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
    }
}

引数はマルチビュー インデックスになります。これらは私が使用する単なるヘルパー関数です。関心のある項目が index だけである場合は、これらの呼び出しをメイン メソッドにインライン化できます。

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());
}

うまくいけば、これがあなたの助けになるでしょう。

于 2009-08-26T23:40:50.813 に答える
0

this.IsAsyncbut not rather ScriptManager.GetCurrent(Page).IsInAsyncPostBack(またはあなたの場合は) を使用するべきではありませんthis.Master.ScriptManager.IsInAsyncPostBack

于 2013-03-13T10:18:58.430 に答える