关于updatepanel中注册执行javascript

    好些天都在糊里糊涂,最近也比较懒,居然看到了个留言,永远不更新的博客一等奖,相当尴尬,哈哈。写一些最近自己或别人遇到的小问题吧。
    1、关于updatepanel注册js
    最近在项目里需要用到altas,本人也是新手,老用最简单的updatepanel,在注册脚本时也遇到了困难,无法注册。本来是在updatepanel中放了一个gridview,偶想在girdview中一个模板列点击弹出一个窗体,注册window.open()来解决问题。本来不是在updatepanel中,所以用ClientScript.RegisterStartupScript直接注册挺好使。
    在拖入updatepanel后发现无法注册脚本,想想RegisterStartupScript本来是在页面加载时启动js的,在updatepanel中部分刷新,肯定是无法注册的。
    后来发现了ScriptManager.RegisterStartupScript方法,挺好使,呵呵。
    ScriptManager.RegisterClientScriptBlock(UpdatePanelName, typeof(UpdatePanel), "标识key", "脚本", true);
    下面是一个demo,模板列定义如下:


< asp:TemplateField  HeaderText ="客户ID" >
     
< ItemTemplate >             
      
< asp:LinkButton  ID ="linkbtnCID"   runat ="server"   Text ='<%#  Eval("CID") % > ' CommandName="linkbtnCID"   >                       </ asp:LinkButton >
      
</ ItemTemplate >
</ asp:TemplateField >
   
    在GridView对应的RowCommand事件中如下操作:

protected   void  gvClientInfo_RowCommand( object  sender, GridViewCommandEventArgs e)
    {
        
// 如果是linkButton被点击
         if (e.CommandName.Equals( " linkbtnCID " ))
        {
            LinkButton lbtn 
=  (LinkButton)e.CommandSource;
            GridViewRow dgRow 
=  (GridViewRow)lbtn.Parent.Parent;
            
string  tmpText  =  lbtn.Text.ToString();          
            tmpText 
= " window.open('customerDetailsInfo.aspx?CID= "   +  tmpText  +   " ' ,'newwindow','height=550,
                width=700, menubar=no ')
" ;
            ScriptManager.RegisterStartupScript(
this .UpdatePanel2,  this .GetType(),  " click " , tmpText,  true );      
      
        }
    }

    2、关于RegisterStartupScript,RegisterClientScriptBlock
        RegisterStartupScript 将 js嵌入到页面的底部,</form> 的前面
        RegisterClientScriptBlock 将 js嵌入到页面中开启元素 <form> 后面

    3、关于“该行已经属于另一个表”错误
       这个问是出现在不同dataTable之间的行复制出现的问题。
       看这个代码:

       
 DataTable tmpdt  =  sodo.getDataTable( " text " , strSql, sp);              
 dt.Rows.Add(tmpdt.Rows[
0 ]);
    
     这个明显的错误就是tmpdt的行是一个对象引用,相当于一个指针,错误是难免的,可有以下解决办法:

DataTable tmpdt  =  sodo.getDataTable( " text " , strSql, sp);             
1、 dt.Rows.Add(tmpdt.Rows[
0 ].ItemArray);
2、 dt.ImportRow(tmpdt.Rows[0]);

你可能感兴趣的:(JavaScript)