Как предотвратить закрытие модального всплывающего окна (ModalPopupExtender) при обратной передаче? - PullRequest
13 голосов
/ 03 сентября 2008

Я использую Microsoft AjaxControlToolkit для модального всплывающего окна.

И в модальном всплывающем окне, когда произошла обратная передача, окно закрывалось. Как предотвратить закрытие модального всплывающего окна?

Ответы [ 7 ]

11 голосов
/ 20 декабря 2011

Поместите свои элементы управления в панель обновления. Пожалуйста, посмотрите мой пример кода, pnlControls - это элемент управления, который содержит элементы управления, которые будут отображаться во всплывающем окне:

<asp:Panel ID="pnlControls" runat="server">

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
               <asp:Button ID="TestButton" runat="server" Text="Test Button" onclick="TestButton_Click" />
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>         
        </ContentTemplate>

    </asp:UpdatePanel>

Это сделает работу за вас:)

С уважением, Грегор Примар

7 голосов
/ 03 сентября 2008

Вы можете вызвать метод Show() во время обратной передачи, чтобы предотвратить закрытие модального всплывающего окна

MyModalPopoupExtender.Show()
4 голосов
/ 03 сентября 2008
protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        // reshow
        MyModalPopup.Show()
    }
}
1 голос
/ 21 ноября 2014

У меня была та же проблема с поддержанием модального режима во время обратной передачи.

Мое решение:

Используйте EventTarget, чтобы определить, поступает ли обратная передача от элемента управления в модальном режиме, и оставьте модель открытой, если она есть. Обратная передача может исходить от элемента управления в моде, если модальное окно открыто.

В событии загрузки для элемента управления страницы, содержащего модальное. Определите, является ли постбэк от мой ребенок. Определите, если это из элемента управления, который находится на модальной панели.

    Protected Sub Control_Load(sende As Object, e As EventArgs) Handles Me.Load
        If IsPostBack Then
            Dim eventTarget As String = Page.Request.Params.Get("__EventTarget")
            Dim eventArgs As String = Page.Request.Params.Get("__EventArgument")

            If Not String.IsNullOrEmpty(eventTarget) AndAlso eventTarget.StartsWith(Me.UniqueID) Then
                If eventTarget.Contains("$" + _credentialBuilder.ID + "$") Then
                    ' Postback from credential builder modal.  Keep it open.
                    showCredentialBuilder = True
                End If
            End If
        End If
    End Sub

В предварительном просмотре проверьте мой флаг и вручную покажите модальный

    Protected Sub Control_PreRender(ByVal sende As Object, ByVal e As EventArgs) Handles Me.PreRender
        If showCredentialBuilder Then
            _mpeCredentialEditor.Show()
        End If
    End Sub
1 голос
/ 27 ноября 2010

После предыдущего случая ...

В Simple.aspx пользователь должен ввести название компании. Если пользователь не помнит название компании, он может нажать кнопку, которая откроет всплывающее модальное окно.

в модальном окне я хочу разрешить пользователю выполнять поиск по списку компаний. Он может ввести частичное имя и нажать кнопку поиска. Матчи будут показаны в списке ниже. Он может нажать на элемент списка и вернуться. Если компания не существует, он может нажать кнопку «Создать», чтобы создать новую компанию.

Итак, как вы можете видеть, я хочу много функциональности в этом модальном окне.

Спасибо!

JC

1 голос
/ 12 февраля 2009

Как вы уже знаете, модальное всплывающее окно предназначено только для клиентов, да, вы можете собирать информацию во время обратной передачи, но если вы делаете обратную передачу, он будет скрывать 100% времени.

Конечно, как и другие, вы можете сделать .show во время обратной передачи, но это зависит от того, что вам нужно сделать.

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

Не могли бы вы рассказать нам, почему вам нужно сделать обратную передачу, может быть, мы могли бы помочь вам лучше! :)

1 голос
/ 04 сентября 2008

Я думаю, это работает, но не в моем случае. У меня есть пользовательский элемент управления, который открывается в модальном всплывающем окне, и этот пользовательский элемент управления сам выполняет обратную передачу. Так что в этом пользовательском элементе управления у меня нет свойства модального всплывающего окна.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...