Как я могу зарегистрировать записи истории (Назад / Вперед) в Мультивью (в Active Index изменено) - PullRequest
0 голосов
/ 27 августа 2009

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

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

Очень важно разрешить пользователю переходить назад и вперед, используя историю браузера.

ScriptManager находится на главной странице, и его свойство EnableHistory установлено на True.

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

Ответы [ 2 ]

2 голосов
/ 27 августа 2009

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

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

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

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 голосов
/ 13 марта 2013

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

...