【问题标题】:AjaxManager not found...null未找到 AjaxManager...null
【发布时间】:2012-05-07 06:05:20
【问题描述】:

我有一个User Control 和一个Content Page。在Content Page 中,我在Update panel 内有一个RadDockLayout control,如下所示。我有一个Image button,一旦用户将RadDock 的位置交换为Drag Drop。用户按下保存按钮将订单保存在数据库中。

<asp:updatepanel id="UpdatePanel1" runat="server">
    <ContentTemplate>
        <telerik:RadDockLayout runat="server" OnLoadDockLayout="RadDockLayout1_LoadDockLayout"
            ID="RadDockLayout1" OnSaveDockLayout="RadDockLayout1_SaveDockLayout">

                        <telerik:RadDockZone runat="server" Orientation="Horizontal" ID="HealthZone" Visible="false"
                            BorderStyle="None" Style="margin: 0;">
                        </telerik:RadDockZone>
                        <telerik:RadDockZone runat="server" Orientation="Horizontal" ID="RadDockZone1" BorderStyle="None"
                            Style="margin: 0; width:540px;">
                        </telerik:RadDockZone>
                        <telerik:RadDockZone runat="server" Orientation="Horizontal" ID="AdZone" Visible="false"
                            BorderStyle="None" Style="margin: 0;" Width="324px">
                        </telerik:RadDockZone>

        </telerik:RadDockLayout>

    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="imgsave" EventName="Click" />
    </Triggers>
</asp:updatepanel>

在保存过程中,我调用了另一个函数。这也在User Control下。

public void RePopulateOverview(UserControl overviewuc)
{
    RePopulated = true;
    CurrentDockStates.Clear();
    RadAjaxManager AjaxManager = RadAjaxManager.GetCurrent(this.Page);
    AjaxManager.AjaxSettings.Clear();
    AjaxManager.AjaxSettings.AddAjaxSetting(AjaxManager, overviewuc);
    //InitiateAjaxRequest
    RadScriptManager.RegisterStartupScript(this.UpdatePanel1, 
    this.GetType(), "OverviewReLoadScript" + 
    Guid.NewGuid().ToString().Replace("-", "a"), 
    "javascript:InitiateAjaxRequest();", true);
}

下面是对应的javascript函数,如下所示。

<script type="text/javascript">
    function InitiateAjaxRequest() {
        if ($find("<%= Telerik.Web.UI.RadAjaxManager.GetCurrent(this.Page).ClientID %>") != null)
            $find("<%= Telerik.Web.UI.RadAjaxManager.GetCurrent(this.Page).ClientID %>").ajaxRequest();
        else {
            alert("AjaxManager not found..." + $find("<%= Telerik.Web.UI.RadAjaxManager.GetCurrent(this.Page).ClientID %>"));
        }
    } 
</script>

我的问题是当我presses Save Button second timecrashesError Message 在下面。

AjaxManager 未找到...null

【问题讨论】:

标签: javascript jquery asp.net telerik


【解决方案1】:

试试这个解决方法:

<script type="text/javascript">
    var ajaxMgrInstance = null;
    function InitiateAjaxRequest() {
        if (ajaxMgrInstance == null) {
            ajaxMgrInstance == $find("<%= myRadAjaxManager.ClientID %>");
        }
        if (ajaxMgrInstance != null) {
            ajaxMgrInstance.ajaxRequest();
        }
        else {
            alert("AjaxManager not found..." + "<%= myRadAjaxManager.ClientID %>");
        }
    } 
</script>

同时我会尝试更好地找到问题的根本原因。

编辑:更新了$find 调用以匹配 Telerik 的 API 文档的语法。

【讨论】:

  • 它实际上总是在 else 语句中。
  • @Guest 现在试试我的解决方案。我更新了$find 调用以使用ID 属性(假设myRadAjaxManager)而不是使用GetCurrent 调用。这就是 Telerik 在他们的文档中的做法(我在对您问题的评论中的链接)。
  • 我没有在表单中明确控制。这就是我以这种方式使用它的原因。非常感谢您的提示。
  • @Guest 担心可能是这种情况。并且无法告诉您它会产生什么影响(不应该,但认为值得一试)。
【解决方案2】:

应该是这样的。

var ID;
function InitiateAjaxRequest() {
    if (ID == null) {
        ID = $find("<%= Telerik.Web.UI.RadAjaxManager.GetCurrent(this.Page).ClientID %>");
        ID.ajaxRequest();
    }
    else
        ID.ajaxRequest();
}

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 2021-02-16
    • 2021-12-23
    • 2018-03-16
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多