После изучения мат части и пляске с бубном - вышло такое вот решение (Работает и под IE 5.0 и под IE 6.0)
Задача: На форме добавления сущности (ну например User) предусмотреть возможность в модальном окне добавления новых связаных сущностей (Загнул да ? ), простыми словами: есть форма добавления юзверя, на ней dropdownlist с элементами другой сущности (ну например Country), возле него (dropdownlist) кнопочка NEW, которая открывает модальный диалог для добавления нового элемента в сущность Country (это у меня так, можно открывать все что угодно ).
После того как что-то было добавлено диалог должен закрыться, и родительская форма должна перегрузиться дабы вытянуть все новые значиния из базы (опять же нично не мешает вам вернуть значения и жабаскриптом их вставить).
основная форма (UserForm.aspx):
<a href="javascript:ShowNewDialog('UserForm.aspx?mode=AddModal');">NEW</a>
<script language="javascript">
function ShowNewDialog(url)
{
var sFeatures="dialogHeight:600px;dialogWidth:800px;center:yes;edge:sunken;unadorned:yes;"
var returnValue = window.showModalDialog("modalDialog.html",url,sFeatures);
if(returnValue=="add")
{
var url = document.location.toString();
document.location = url;
}
}
</script>
html для хостинга вспомогательной формы (modalDialog.html):
<html>
<head>
<title>modalDialog</title>
</head>
<body>
<iframe id="formIframe" width=100% height=100% src="" ></iframe>
<script>
var elem = document.getElementById("formIframe");
if (elem!=null)
{
elem.src=window.dialogArguments;
}
</script>
</body>
</html>
Дальше собственно форма добавления вспомогательной сущности приводить все не буду, потому как ниче там интересного нету, некоторые особо важные моменты:
Первым делом никакого кеширования (ну а девушки потом )
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'.....
'Никакого кеширования
Response.Expires = 0
Response.Cache.SetNoStore()
Response.AppendHeader("Pragma", "no-cache")
'.....
End Sub
Вот потом танцы с бубнами, скажем есть у вас некая кнопка Add в ее обработчике:
'Добавляем пользователя
'UserController.add(User)
'Закрываем окно
Response.Write("<script language=""JavaScript"">top.returnValue='add'; parentwin = top.window.self; parentwin.opener = top.window.self; parentwin.close();</script>")
Для кнопки Close/Cancel это же можно и на стороне клиента прицепить только в моем случае меняем
top.returnValue='add';
на
top.returnValue='somethingelse';
дабы родительская страница не рефрешилась.
Вот и все, надеюсь кому-то будет полезно.
Jcomp
12 July 2005 18:40
|