Как закрыть radwindow без обновления родительского
У меня есть родительская страница, которая запускает Telerik Radwindow. Все работает хорошо. Моя проблема в том, что когда RadWindow закрыто, родительский модуль снова перезагрузится. Я не хочу этого как я могу закрыть Radwin
Как только radwindow завершит обработку значения, мне нужно, чтобы оно вернуло его на родительскую страницу, и я бы хотел, чтобы родительская страница имела доступ к этому значению в моем коде за страницей.
3 ответа
Родительский ASPX:
<telerik:RadWindowManager ID="RadWindowManager1" runat="server" DestroyOnClose="true" Width="750px" Height="500px" OnClientClose="onClientClose">
<windows>
<telerik:RadWindow ID="RadWindow1" runat="server">
</telerik:RadWindow>
</windows>
</telerik:RadWindowManager>
<%-- RadAjaxManager --%>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="RadAjaxManager1_AjaxRequest">
<ajaxsettings>
<telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
<UpdatedControls>
<telerik:AjaxUpdatedControl ControlID="RadAjaxManager1" />
<telerik:AjaxUpdatedControl ControlID="RadGrid1" />
</UpdatedControls>
</telerik:AjaxSetting>
</ajaxsettings>
</telerik:RadAjaxManager>
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
// Insert in RadWindow
function showForm(url) {
window.radopen(url, "RadWindow1");
return false;
}
function onClientClose(oWnd, args) {
// get the transferred arguments
var arg = args.get_argument();
if (arg == '' || arg == null) {
// No need to refresh RadGrid
}
else {
$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest(arg);
}
}
</script>
</telerik:RadCodeBlock>
Родительский код сзади:
protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
{
var result = Int32.Parse(e.Argument); // return argument from child
}
Детский ASPX
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
<script type="text/javascript">
//mandatory for the RadWindow dialogs functionality
function getRadWindow() {
if (window.radWindow) {
return window.radWindow;
}
if (window.frameElement && window.frameElement.radWindow) {
return window.frameElement.radWindow;
}
return null;
}
// Fires when the changes are saved
function onClientClose(arg) {
// Pass the arguments from the dialog to the callback function on the main page.
getRadWindow().close(arg);
}
</script>
</telerik:RadCodeBlock>
Детский код позади
protected void ChildSave_Click(object sender, EventArgs e)
{
ClientScriptManager cs = Page.ClientScript;
cs.RegisterStartupScript(typeof(Page), "CloseScript_" + UniqueID,
"onClientClose('1');", true); // Return value 1 to parent
}
Вы добавили JavaScript OnClientClose, чтобы получить элемент управления из открытого окна?
Просто проверьте это.
На самом деле поддержка Telerik в этих вопросах довольно хорошая (одна из лучших, которую я видел), и вы должны опубликовать свой вопрос на их форуме, если вы не получите ничего благоприятного здесь.
Как сказал Bumble Bee, у вас, скорее всего, либо есть функция, подключенная к OnClientClose, которая передает страницу, либо вы вызываете что-то вроде GetRadWindow().BrowserWindol.location.reload() со страницы содержимого.
Однако вы говорите, что хотите иметь значение в коде страницы родителя. Для этого вам необходимо совершить поездку на сервер. Так как вы не хотите перезагружать страницу, самый простой способ сделать это - использовать Ajax - и если вы используете RadControls, есть RadAjaxManager, который поможет вам в этой задаче:)
Что вы можете сделать, это запустить Ajax-запрос на родительской странице, который будет использовать клиентский API RadAjaxManager для запуска Ajax-запроса, который даст вам данные на сервере. Сценарий, похожий на ваш, показан в этой демонстрации. В нем, когда RadWindow закрывается (на странице содержимого), мы вызываем функцию JavaScript на родительской странице, которая запускает Ajax-запрос через RadAjaxManager и перепривязывает сетку на сервере - все выполняется без обратной передачи. Проверьте эти справочные статьи для получения дополнительной информации по этому вопросу: