将javascript更新限制为仅限asp:UpdatePanel

时间:2013-02-28 18:48:42

标签: c# javascript asp.net updatepanel

我在GridView中有UpdatePanel并使用javascript在用户点击展开按钮时切换行的可见性。 GridView上方有相当多的信息,但我只想更新相应UpdatePanel中的信息,以便屏幕保持原样,但JavaScript调用会导致整个屏幕刷新窗口跳回到顶部。

我用于GridView的代码实际上来自CodeProject上的ExtGridView控件(http://www.codeproject.com/Articles/12299/ExtGridView) - 它会转换asp:TemplateField的{​​{1}}在其他项目下面的新行。

我是JavaScript新手,对ASP.NET很新,所以我可能会遗漏一些简单的东西。有没有办法让JavaScript刷新到导致它的相应GridView

以下是JavaScript代码:

UpdatePanel

以下是<script type="text/javascript"> //<![CDATA[ function TglRow(ctl) { var row = ctl.parentNode.parentNode; var tbl = row.parentNode; var crow = tbl.rows[row.rowIndex + 1]; var ihExp = ctl.parentNode.getElementsByTagName('input').item(0); tbl = tbl.parentNode; var expandClass = tbl.attributes.getNamedItem('expandClass').value; var collapseClass = tbl.attributes.getNamedItem('collapseClass').value; var expandText = tbl.attributes.getNamedItem('expandText').value; var collapseText = tbl.attributes.getNamedItem('collapseText').value; if (crow.style.display == 'none') { crow.style.display = ''; ctl.innerHTML = collapseText; ctl.className = collapseClass; ihExp.value = '1'; } else { crow.style.display = 'none'; ctl.innerHTML = expandText; ctl.className = expandClass; ihExp.value = ''; } }//]]> </script>

的摘录
GridView

1 个答案:

答案 0 :(得分:1)

好好拍摄...再用ExtGridView代码玩一下,我想出来了。调用javascript的扩展/切换按钮也分配了一个HRef作为链接,因此当它被单击时,它不仅会调用JavaScript,还会像点击链接一样,导致页面刷新。

ExtGridView

的罪魁祸首代码
       // ...
       else if (RowType == DataControlRowType.DataRow || RowType == DataControlRowType.Footer)
        {       
            _expCell = new TableCell();

            _ctlExpand = new HtmlAnchor();
            //_ctlExpand.HRef = "#";          -- Commenting this out worked!
            _ctlExpand.Attributes["onclick"] = "TglRow(this);";

            _ihExp = new HtmlInputHidden();
            _ihExp.ID = "e" + this.DataItemIndex.ToString();

            _expCell.Controls.Add(_ctlExpand);
            _expCell.Controls.Add(_ihExp);      
        }

        if (_expCell != null)
        {
            _expCell.Width = Unit.Pixel(20);
            Cells.AddAt(0, _expCell);
        }