Telerik RadWindow Javascript возвращает значения в ASP.NET - PullRequest
3 голосов
/ 10 января 2010

У меня есть родительская страница, которая запускает telerik radwindow и передает ему аргумент.

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

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

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

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

Когда я установил оповещения, я получаю значения, отображаемые по мере необходимости.

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

И нет ли лучшего способа, которым я могу это сделать.

вот мой код на родительской странице:

Родительский ASPX:

<script type="text/javascript">
    function OpenWnd() {
        var oWnd = radopen(null, "RadWindow1");
    }
    function OnClientShow(oWnd) {
        //Create a new Object to be used as an argument to the radWindow
        var arg = new Object();
        //Using an Object as a argument is convenient as it allows setting many properties.
        arg.text = document.getElementById("TextBox1").value;
        //Set the argument object to the radWindow  
        oWnd.Argument = arg;
    }

    function ClientCallBackFunction(radWindow, returnValue) {
        //check if a value is returned from the dialog
        if (returnValue.newtext) {
            document.getElementById("Hidden1").value = returnValue.newtext;
            alert("HiddenValue: " + document.getElementById("Hidden1").value);
        }
    }
</script>
<form id="form1" runat="server">
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
</telerik:RadScriptManager>
<div>
    <telerik:RadWindowManager ID="RadWindowManager2" runat="server">
        <Windows>
            <telerik:RadWindow ID="RadWindow1" runat="server" OnClientShow="OnClientShow" ClientCallBackFunction="ClientCallBackFunction"
                NavigateUrl="Dialog2.aspx" />
        </Windows>
    </telerik:RadWindowManager>
</div>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>
<input type="button" value="Send content to dialog page" onclick="OpenWnd()" />
<p>
    <input id="Hidden1" type="hidden" runat="server" />
</p>
</form>

Родительский код:

        protected void Page_Load(object sender, EventArgs e)
    {
        HtmlInputHidden hidden = (HtmlInputHidden)Page.FindControl("Hidden1");

        if (IsPostBack && !string.IsNullOrEmpty(hidden.Value))
        {
          //Code Here
        }
    }

Вот мой код диалога:

Диалог ASPX:

  <script 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 ConfigureDialog() {
            //Get a reference to the radWindow wrapper
            var oWindow = GetRadWindow();
            //Obtain the argument 
            var oArg = oWindow.Argument;
            //Use the argument
            var oArea = document.getElementById("TextBox1");
            oArea.value = oArg.text;
        }
        function SendAndClose() {
            var oWindow = GetRadWindow();
            //Get current content of text area
            var arg = new Object();
            arg.newtext = document.getElementById("TextBox1").value;
            oWindow.Close(arg);
            RefreshParentPage();
        }
        function RefreshParentPage() {
            GetRadWindow().BrowserWindow.location.reload();

            alert("RefreshParentPage");
        }
    </script>

Спасибо за помощь

Ian

Ответы [ 2 ]

4 голосов
/ 11 января 2010

Вы делаете следующее

GetRadWindow().BrowserWindow.location.reload(); 

Но если это не вызовет обратную передачу, это просто перезагрузит родительскую страницу, вам нужно вызвать откат. Вы можете попробовать добавить кнопку в родительскую форму с набором стилей «display: none», и, обработав событие click в коде, вы можете отключить эту кнопку из своего кода js.

На родительской странице:

<asp:Button runat="server" id="btnClick" Style="display:none"    OnClick="btnClick_Click"/>

protected void btnClick_Click(object sender,EventArgs e)
{
     string val = this.Hidden1.Value; //Code goes here
}

Вы можете вызывать из своего javascript вот так (не jQuery), поместите это в ваш обратный вызов

document.getElementById('<%= btnClick.ClientID').click();
0 голосов
/ 28 июля 2011

Лучшим подходом было бы это на стороне aspx:

<%=this.ClientScript.GetPostBackEventReference(new System.Web.UI.PostBackOptions(btnClick))%>

...