3

次のようなコントロールがあります。

<telerik:RadCodeBlock runat="server">
    <script type="text/javascript">
        function refresh() {
            window.$find("<%= RadAjaxManager1.ClientID %>").ajaxRequest("RebindRecommendations");
        }
    </script>
</telerik:RadCodeBlock>
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="AjaxRequest">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="NameOfGrid" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManager>
<telerik:RadWindowManager ID="RadWindowManager1" runat="server">
    <Windows>
        <telerik:RadWindow ID="RadWindow1" runat="server" NavigateUrl="UrlOfPage" OnClientClose="refresh"></telerik:RadWindow>
    </Windows>
</telerik:RadWindowManager>

ページ:

<script type="text/javascript">
    function closeWindow() {
        self.close();
        return false;
    }
</script>
<!-- form fields here -->
<telerik:RadButton runat="server" ID="_cancel" Text="Cancel" OnClientClick="closeWindow"></telerik:RadButton>
<telerik:RadButton runat="server" ID="_submit" Text="Submit" OnClientClick="closeWindow" OnClick="DoSomeDataBaseStuff"></telerik:RadButton>

これは意図したとおりに機能します。キャンセルまたは送信ボタンを押すと、RadWindow が削除され、コントロールのグリッドが更新されます。問題は、その時点までにデータベースの処理が完了していないため、グリッドを更新しても変更が反映されないことです。ページの実装を次のように切り替えようとしました。

ページ:

<script type="text/javascript">
    function closeWindow() {
        self.close();
        return false;
    }
</script>
<!-- form fields here -->
<telerik:RadButton runat="server" ID="_cancel" Text="Cancel" OnClick="CallJavaScriptToKillWindow"></telerik:RadButton>
<telerik:RadButton runat="server" ID="_submit" Text="Submit" OnClick="DoSomeDataBaseStuffAndThenCallJavaScriptToKillWindow"></telerik:RadButton>

コード ビハインドは、データベースの作業が完了した後、最終的にこれを呼び出します。

ClientScript.RegisterStartupScript(GetType(), "Key", "closeWindow();", true);

closeWindow 関数でブレークポイントにヒットしましたが、同じ動作をしません (ウィンドウは実際には閉じません)。次のようなさまざまな反復を試しました。

ClientScript.RegisterStartupScript(GetType(), "Key", "$(document).ready(function() {return closeWindow();});", true);

無駄に。私は何が欠けていますか?

4

3 に答える 3

6

「自己」とは何ですか?「これ」という意味ではありませんか?

ウィンドウの内側から、またはウィンドウを起動するページからRadWindowを閉じようとしていますか?

ウィンドウの内側から、私は通常これを行います:

    function GetRadWindow()
    {
        var oWindow = null;
        if (window.radWindow)
            oWindow = window.radWindow;
        else if (window.frameElement.radWindow)
            oWindow = window.frameElement.radWindow;
        return oWindow;
    }

    function Close()
    {
        var oWindow = GetRadWindow();
        oWindow.argument = null;
        oWindow.close();
        return false;
    }

また、ClientScriptではなくScriptManager.RegisterStartupScriptを使用します。

于 2011-10-13T18:55:22.240 に答える
0

この回答を改善しているかどうかはわかりませんが、理解しやすくしようとしているだけです。メインページから開く rad ウィンドウがあります。radwindow は Javascript ではなくコード ビハインド (C#) で開かれます。ユーザーが RadWindow の [保存] ボタンをクリックすると、いくつかのロジック タスクが実行されてから、radwindow 自体が閉じられます。あなたは単にする必要があります:

このコード ブロックを RadWindow aspx に入れます.....

<telerik:RadCodeBlock runat="server" ID="rcb1">
<script language="javascript" type="text/javascript">

function GetRadWindow() 
{
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
return oWindow;
}
function CloseDialog(button) 
{
GetRadWindow().close();
}  

</script>
</telerik:RadCodeBlock>

閉じる前のロジックを実行した後、このコードを RadWindow のボタン クリックに配置します (他のロジックを実行する同じボタンがウィンドウを閉じます)。

C# ClientScript.RegisterStartupScript(typeof(string), "", "CloseDialog();");

また

VB ClientScript.RegisterStartupScript(Me.GetType(), "", "CloseDialog();")

codebehind から radwindow を開く方法を知りたい場合は、次のようにします。

RadWindow window1 = new RadWindow();
// Set the window properties   
window1.NavigateUrl = "winStrengthChart.aspx?EMPLOYIDNAME=" + parmString;
window1.ID = "RadWindow1";
window1.Width = 800;
window1.Height = 650;
window1.VisibleStatusbar = false;
window1.Behaviors = Telerik.Web.UI.WindowBehaviors.Close | Telerik.Web.UI.WindowBehaviors.Resize | Telerik.Web.UI.WindowBehaviors.Move;
window1.VisibleOnPageLoad = true; // Set this property to True for showing window from code   
rwm1.Windows.Add(window1);
this.Form1.Controls.Add(window1);   

...そしてもちろん、ウィンドウを開くメイン ページに基本的な RadWindowManager が必要です。

<telerik:RadWindowManager ID="rwm1" runat="server">
<Windows>
</Windows>
</telerik:RadWindowManager>

私が間違いを犯した場合、これは機能するはずです。修正してください。

ありがとう

于 2012-04-10T15:57:38.343 に答える
0

以前にこの問題に遭遇したことがあると確信しており、これで修正されたと思います。

setTimeout("self.close()", 1000);

それでもうまくいかない場合は、これを試してください:

setTimeout("self.focus()", 500); //adjust the timeout as needed
setTimeout("self.close()", 1000);

必要に応じて、次の方法でも実行できます。

setTimeout(function(){
    self.close();
}, 1000);
于 2011-10-13T17:18:34.287 に答える