【发布时间】: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