2009-08-26 6 views
0

Я использую панель обновления для асинхронного обновления моей страницы. Его навигацию необходимо зарегистрировать, когда Multiview изменяет свой активный индекс.Как я могу зарегистрировать записи истории (Назад/Вперед) в Multiview (при активном индексе изменен)

Например, при первой загрузке страницы, активный индекс Multiview = 0. Когда пользователь нажимает на ссылку, я показать содержимое Просмотр индекса 1.

Это действительно важно, чтобы позволить пользователю для перехода назад и вперед с использованием истории браузера.

ScriptManager расположен на главной странице и имеет свою EnableHistory недвижимость True.

Кто-то реализовал его при работе с Multiview?

ответ

2

Я думаю, что это должно сработать, но вам нужно немного его настроить. Я делаю что-то очень похожее, но мне пришлось отказаться от использования multview в области обновления из-за проблемы с сторонним элементом управления, который я встроил в него.

Вам нужно добавить ссылку на свою главную страницу в вашем aspx-файле, используя тег asp.net ниже. Кроме того, вы можете открыть сценарист как публичный элемент управления на главной странице, чтобы вы могли связать с ним событие.

В коде страницы/html-кода страницы: обновите виртуальный путь к своему хозяину или используйте тип, чтобы назначить ссылку на тип.

<%@ 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», вы должны использовать что-то более интуитивно понятное для своего контента. В моей реализации у меня есть ряд элементов (например, порядок сортировки, индекс страницы и т. Д., Разделенные разделителями, а затем разбивают их и назначают).

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

Арги будут мультивизельным индексом. Это только вспомогательные функции, которые я использую. Если индекс является единственным предметом, о котором вы заботитесь, то вы можете просто вставить эти вызовы в основные методы.

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

Hi Jim, Большое спасибо, сейчас он работает так, как должен! Josi – 2009-08-27 03:48:06

0

Вы не должны использовать this.IsAsync, а не ScriptManager.GetCurrent(Page).IsInAsyncPostBack (или в вашем случае, this.Master.ScriptManager.IsInAsyncPostBack).