LinkButton回发报错"__doPostBack('……','')" 缺少对象
我今天发现一个隐藏很深Bug,在议程页面里查看议案信息并关闭,关闭时报错误”缺少对象”__doPostBack,刚开始 因为我用系统的关闭按钮 也就是X 关闭,测不出问题,所以 怀疑是按钮问题,进过查看前台代码发现 缺少的对象是 GridSubject 也就是父页列表href的URL 是__doPostBack(‘…………’’’)其中第一参数也和报错页面一致,所以我找到了原因所在,因为我们后台连接使用的是LinkButton,我尝试判断PostBack的第一参数是否存在,可以没有方法,(也许有,我没找到),我在寻找的时候发现,MSDN推荐用HyperLink代理LinkButton,发现很不错,没有href属性,也就不存在__doPostBack了,经测试 果然不再出错,可惜样式没有了,被主题覆盖,通过网络搜索发现 用 text-decoration:underline解决了。这里似乎解决完了,我怕关闭页面不能刷新,果然一测试,不能刷新。
最终解决
方法:
后台代码 在RowDataBound中
TableCell tc = e.Row.Cells[1];
tc.SetDisplayText(14);
e.Row.Cells[1].Controls.Clear();
LinkButton link = new LinkButton();
link.Text = tc.Text;
link.ToolTip = tc.ToolTip;
link.Style.Value = "text-decoration:underline;";
e.Row.Cells[1].Controls.Add(link);
link.Attributes["onclick"] =
string.Format(@"javascript:PopSub('{0}',this);"
, e.Row.Cells[0].Text
);
前台代码:
function PopSub(SubID,obj) {
var Dom = Pop('~/Before/SubjectInfo.ascx|SubjectID=' + SubID, null,
'dialogWidth:648px; dialogHeight:655px;center:yes;help:no;resizeble:yes;scroll:yes;status:no',
'话题信息');
//保存过话题信息的 Dom不是空
var hrefStr = "javascript:__doPostBack('myPan$ucView_myPan$GridSubject$ctl03$ctl01','')";
if(IsNull(Dom))
{
obj.removeAttribute("href");
/* 由于 循环浪费时间方法和Try方法都不能解决 所以我采用了 去除href方式
//用来浪费时间
var i =0;
var strin="";
while (i<100000)
{
strin="UU"+i;
i++
}
if(i==100000)
{
//
}
try
{
obj.setAttribute("href",hrefStr,true);
}
catch(e){}
return false;
*/
}
else
{
obj.setAttribute("href",hrefStr,true);
}
}
![](http://www.cnblogs.com/Emoticons/baimantou/202015214.gif)