2010-01-29 1 views
1

У меня есть веб-форма asp.net. В форме, которую пользователь заполнит, есть несколько полей. Существует гиперссылка, которая открывает модальное окно (я использую JQuery & prettyphoto, но может переключиться на http://www.ericmmartin.com/projects/simplemodal/, потому что его документация лучше)Родительская страница порождает модальное окно, кнопка на модальном ветре вызывает триггер обратной передачи на родителя?

Модальное окно содержит IFrame, когда пользователь делает выбор, и сохраняет запись ,

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

В настоящее время у меня есть гиперссылка на последней странице, где target = parent и href = URL-адрес родительской страницы. Тогда у меня есть javascript, который автоклинирует его. Я знаю, что это дешевый взлом. Затем он отправляет пользователя на родительскую страницу, однако страницы перезагружаются и все исходные данные теряются. В этом проблема.

Каков наилучший способ для этого?

спасибо!

ответ

2

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

Внутри iframe, window.parent относится к внешнему объекту window, а на внешней странице он относится к самому себе.

https://developer.mozilla.org/en/DOM/window.parent

Таким образом, в IFRAME, вы можете написать код по линии:

// Check to make sure we're an iframe 
if (window.parent !== window) { 
    // Run an arbitrary function in the parent window 
    var daddy = window.parent; 
    daddy.doStuffThatSubmitsAFormInTheParentPage(); 
} 
// Make sure you have that function defined in the parent page. 

Вот пример доступа в jsbin. Вам понадобится консоль, чтобы увидеть любовь.

http://jsbin.com/ucisi/5

Соответствующий код, если вы хотите это довольно

http://jsbin.com/ucisi/5/edit

http://jsbin.com/ucisi/4/edit

0

С решением Алекса я был в состоянии решить эту проблему.

На родительской страницы, у меня есть:

<script language="JavaScript"> 
<!-- 
    function clickPostBackButton() { 
     document.getElementById("<%=PostBackButton.ClientID%>").click(); 
    } 
--> 
</script> 

<asp:Button CssClass="hide" CausesValidation="false" runat="server" Text="Postback" ID="PostBackButton" /> 

Тогда на плавающем фрейме, который загружает в модальном окне. У меня есть форма с кнопкой. Кнопка переводит пользователя на другую страницу. На этой странице у меня есть этот код:

<script language="javascript" type="text/javascript"> 
    // Check to make sure we're an iframe 
if (window.parent !== window) { 
    // Run an arbitrary function in the parent window 
    var daddy = window.parent; 
    daddy.clickPostBackButton(); 
} 
// Make sure you have that function defined in the parent page. 

</script> 

На данный момент модальная вдова закрыта и родительская страница получить постбэк срабатывает. Важно отметить, что моя кнопка имеет CausesValidation = "false", без этой моей страницы были проблемы с проверкой. Спасибо за ваш отзыв Alex Sexton

+0

Мне очень интересно, что вы перечислили свое решение в качестве ответа, но отнеситесь к ответу Алекса Слекстона. Да. – miketaylr

+0

Mike, wtf.Люди ищут фактический код, чтобы они могли копировать и вставлять его и двигаться дальше. Вышеприведенный выше код. – aron