我必须重复使用我在单个页面上多次创建的用户控件。该用户控件具有列表框和按钮。单击该按钮,将打开一个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代码来填充列表框,但这也没有用。
任何帮助/线索/指示赞赏
答案 0 :(得分:0)
要知道触发了哪个控件 - 请考虑使用标记(例如,隐藏字段或RadWindow的客户端对象中的自定义字段)。
在AJAX设置上 - 由于您通过管理器调用AJAX请求,因此您需要一个AJAX设置,其中管理器会更新您需要的控制。也许您需要以编程方式创建所需的AJAX设置:http://www.telerik.com/help/aspnet-ajax/ajax-add-ajaxsettings-programmatically.html
在回发后加载所有用户控件 - 他们应该,否则它们将丢失。这是ASP的运作方式。这对Telerik来说并不具体。