【问题标题】:Boundfield JS Broken on PartialPostback using LoadControlBoundfield JS 使用 LoadControl 在 PartialPostback 上被破坏
【发布时间】:2011-12-05 15:43:51
【问题描述】:

我正在其中构建一个仪表板,我们有 6 个更新面板,用户可以从 ddl 中选择每个更新面板,这些面板显示在 updatePanel 中。当用户更改 updatePanel 上方的 ddl 的索引时,将调用服务器端函数来加载适当的用户控件。在初始页面加载时一切正常;但是,一旦发生部分回发,我很难使用下面的函数找到正确的 html 元素。我今天在互联网上搜索了大约 10 个小时以寻找答案,但我似乎找不到正确的解决方案。

所有用户控件都使用相同的“ActivateGridViewRow”js 函数。我已尝试将 UniqueID 和 ClientID 都链接到 HTML 文档上的相应 HTML 项目,但没有任何效果。请注意,有一个母版页,我不能使用“this”而不是 e.Row.ClientID/UniqueID 作为 js 参数,因为它并不总是 GridView“Row”是被“激活”的项目。

这是来自用户控件“GridView_RowDataBound”函数之一的代码...

[Control].Attributes.Add("onclick", "ActivateGridViewRow('" + 
    e.Row.DataItemIndex % gv_Trends.PageSize + "', '" + e.Row.UniqueID + "', '" + 
    e.Row.CssClass + "', '" + e.Row.FindControl("img_ActivateRow").ClientID + "', '" + 
    e.Row.FindControl("tr_ChildRow").UniqueID + "', 'false')");

示例“ActivateGridViewRow”js 函数...

function ActivateGridViewRow(RowIndex, RowId, RowCssClass, RowImgId, ChildRowId, DoCallBack) {
    if (ChildRowId != "") {
        //var Row = $get(RowId);
        var Row = $get(RowId);
        if (Row == null) Row = $get("ctl00_MainContent_ctl02_" + RowId);
        var ChildRow = $get(ChildRowId);
        if (ChildRow == null) ChildRow = $get("ctl00_MainContent_ctl02_" + ChildRowId);
        var RowImg = $get(RowImgId);
        if (RowImg == null) RowImg = $get("ctl00_MainContent_ctl02_" + RowImgId);

        if (ChildRow.style.display == '') {
            ChildRow.style.display = 'none';
            Row.Class = RowCssClass;
            Row.style.backgroundColor = "";
            if (RowImg != null) RowImg.src = "http://localhost/resources/images/expand_blue.jpg";
            return false;
        }
        else {
            ChildRow.style.display = '';
            ChildRow.style.backgroundColor = "#F5F5F5";
            Row.Class = "";
            Row.style.backgroundColor = "#F5F5F5";
            if (RowImg != null) RowImg.src = "http://localhost/resources/images/collapse_blue.jpg";
            if (DoCallBack == "true") CallServer(RowIndex, "");
            return true;
        }
    }
}

* 注意 - 在部分回发后,返回的 UniqueID 不包含前缀父控件(即 contentplaceholder id 等)...因此,如果控件被重用等,则它不是唯一的...

【问题讨论】:

    标签: c# javascript asp.net ajax updatepanel


    【解决方案1】:

    对于将来可能会阅读此内容的任何人...我最终所做的是将“this”传递给用户控件中需要 js 操作的任何内容...部分回发破坏了 ClientId,因此这些内容变得无用。我发现唯一可行的方法是修改所有内容以传递自我引用...希望这对其他人有帮助:-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2020-02-15
      • 2022-11-04
      • 2012-09-02
      • 2018-10-07
      相关资源
      最近更新 更多