これでうまくいくと思いますが、少しカスタマイズする必要があります。私は非常に似たようなことをしていますが、埋め込んでいたサードパーティ製のコントロールに問題があるため、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());
}
うまくいけば、これがあなたの助けになるでしょう。