C#和Telerik:在弹出窗口关闭时识别适当的用户控件

时间:2015-02-24 01:38:56

标签: c# asp.net user-controls telerik

我必须重复使用我在单个页面上多次创建的用户控件。该用户控件具有列表框和按钮。单击该按钮,将打开一个radwindow,并在关闭时将一些值发送回调用方。当弹出窗口关闭时,我必须确定适当的用户控件,并使用返回的值填充列表框。

我在这里碰到了两个问题。一个是发布的问题,如何从弹出窗口识别调用用户控件。第二,我的ajaxrequest代码有问题吗?即使我对值进行了硬编码,也不会填充列表框。

Parent.aspx

<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
</telerik:RadScriptManager>

<telerik:RadAjaxManager ID="RadAjaxManager" runat="server">    
</telerik:RadAjaxManager>

 <telerik:radwindowmanager id="RadWindowManager1" reloadonshow="true" showcontentduringload="false" runat="server" behavior="Default" initialbehavior="None" ></telerik:radwindowmanager>

    <div>
         <uc:Control ID="Ctrl1" runat="server"></uc:Control >
         <uc:Control ID="Ctrl2" runat="server"></uc:Control >
         <uc:Control ID="Ctrl3" runat="server"></uc:Control >
    </div>

UserControl.ascx

 <telerik:RadCodeBlock runat="server" ID="RadCodeBlock1">
        <script type="text/javascript">
            function foo() {
                var oWnd = radOpen('PopUp.aspx', "Title");                
                oWnd.add_close(OnClientClose);
                return false;
            }

            function OnClientClose(oWnd) {
                var ajaxManager = $find("<%= RadAjaxManager.GetCurrent(Page).ClientID %>");

                ajaxManager.ajaxRequest('Processed return value'); 
                return false;
           }
</script>
</telerik:RadCodeBlock>

<telerik:RadAjaxManagerProxy ID="AjaxManagerProxy1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="ListBox">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="ListBox" />
            </UpdatedControls>
        </telerik:AjaxSetting>
    </AjaxSettings>
</telerik:RadAjaxManagerProxy>

<table>
    <tr>
        <td>
            <asp:ListBox ID="ListBox" Width="100px" runat="server" />
        </td>
        <td>
            <asp:Button ID="AddButton" runat="server" OnClientClick="return foo(); return false;" Text="Add" />
        </td>
    </tr>
</table>

UserControl.ascx.cs

  protected void Page_Load(object sender, EventArgs e)
        {
            var manager = RadAjaxManager.GetCurrent(Page);

            manager.AjaxRequest += new RadAjaxControl.AjaxRequestDelegate(RadAjaxManager1_AjaxRequest);
        }

        protected void RadAjaxManager1_AjaxRequest(object sender, Telerik.Web.UI.AjaxRequestEventArgs e)
        {
            if (!string.IsNullOrEmpty(e.Argument)) 
            {
                ListBox.Items.Add(new RadListBoxItem(e.Argument)); //This code runs without error but does not populate the list box. I even tried to harcode the control ID against which this code should run. The code ran only for the required control but listbox was not populated.
            }
        }

此外,所有3个用户控件都在回发上执行。有没有办法防止它?我处理了用户控件和telerik已经有一段时间了,所以如果我错过了上面示例中的任何关键细节,请告诉我。

我必须使用telerik但不一定是ajaxrequest。我尝试了一些来自telerik演示的javascript代码来填充列表框,但这也没有用。

任何帮助/线索/指示赞赏

1 个答案:

答案 0 :(得分:0)

要知道触发了哪个控件 - 请考虑使用标记(例如,隐藏字段或RadWindow的客户端对象中的自定义字段)。

在AJAX设置上 - 由于您通过管理器调用AJAX请求,因此您需要一个AJAX设置,其中管理器会更新您需要的控制。也许您需要以编程方式创建所需的AJAX设置:http://www.telerik.com/help/aspnet-ajax/ajax-add-ajaxsettings-programmatically.html

在回发后加载所有用户控件 - 他们应该,否则它们将丢失。这是ASP的运作方式。这对Telerik来说并不具体。