代码如下.不知道为什么,现在不可以了.但是我一设置断点就会成功.请知道的朋友指导.解决方法.不知道为什么会有这事情发生.环境:vs2005
我用Response.Write(strScr)有值输出.
函数
   /// <summary>
    /// 注册脚本函数script>/script>已经加载进去,不需要再加此句
    /// </summary>
    /// <param name="strScript">脚本</param>
    /// <param name="page">页面</param>
    public static void RegisterScript(string strScript, BasePage page)
    {
        String csname = DOMUtility.GenerateAGuid().ToString();
        Type cstype = page.GetType();
        strScript = "<script>" + strScript + "</script>";
        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = page.ClientScript;
        cs.RegisterClientScriptBlock(cstype, csname, strScript);
    }
  ///////////////////注册脚本页面操作    private string TextBoxScrpit()
    {
        GridViewRow gvr = grdPayList.Rows[this.grdPayList.EditIndex];
        TextBox txtOCI_Amount = (TextBox)gvr.FindControl("txtOCI_Amount");//数量
        TextBox txtPrice = (TextBox)gvr.FindControl("txtOCIPrice");//单价
        TextBox txtOCI_SumMoney = (TextBox)gvr.FindControl("txtOCI_SumMoney");//总价
        string lstr = "";
        lstr += "  function PriceChange()";
        lstr += "{";        lstr += "var ltxtOCI_Amount=document.getElementById('" + txtOCI_Amount.ClientID + "').value;";//数量
        lstr += "var ltxtPrice=document.getElementById('" + txtPrice.ClientID + "').value;";        lstr += @"  var regdatetime=new RegExp('^\\d+(\\.\\d+)?$');
                   
                   if(ltxtOCI_Amount.match(regdatetime)==null)
                    {
                     alert('数量只可以输入大于零数字吧~!');
                     document.getElementById('" + txtOCI_Amount.ClientID + "').focus();" +
                     @"return false;
                     }                     ";        lstr += @"   
                   if(ltxtPrice.match(regdatetime)==null)
                    {
                     alert('单价只可以输入大于零数字吧~!');
                     document.getElementById('" + txtPrice.ClientID + "').focus();" +
                           @"return false;
                     }                     ";
        lstr += "document.getElementById('" + txtOCI_SumMoney.ClientID + "').value=ltxtOCI_Amount * ltxtPrice ;";        lstr += "}";
       
        return lstr;
    }
    protected void grdPayList_DataBound(object sender, EventArgs e)
    {
        if (grdPayList.EditIndex  > -1)
        {
            GridViewRow gvr = grdPayList.Rows[grdPayList.EditIndex];
            ImageButton imbtRead = (ImageButton)gvr.FindControl("imbtRead");
            Label lblOCI_DI_Item = (Label)gvr.FindControl("lblOCI_DI_Item");//费用项目编号
            TextBox txtOCI_Amount = (TextBox)gvr.FindControl("txtOCI_Amount");//数量
            TextBox txtPrice = (TextBox)gvr.FindControl("txtOCIPrice");//单价            int raitmeID = (int)RaItemTH.GetRateItemID(int.Parse(lblOCI_DI_Item.Text.Trim()));
            if (raitmeID != -1)
            {
                DOMUtility.RegisterScript(OpenWindows(), this);
                imbtRead.Attributes.Remove("onclick");
                imbtRead.Attributes.Add("onclick", "return OpenFindPrice();");
                //DOMUtility.RegisterScript(TextBoxScrpit(), this);
            }
            else
            {
               
                imbtRead.Visible = false;
            }            txtOCI_Amount.Attributes.Remove("onchange");
            txtPrice.Attributes.Remove("onchange");
            txtOCI_Amount.Attributes.Add("onchange", "PriceChange();");
            txtPrice.Attributes.Add("onchange", "PriceChange();");
            string strScr = TextBoxScrpit();
            //Response.Write(strScr);
            DOMUtility.RegisterScript(strScr, this);
            LockOneLine(gvr, imbtRead);
        }
        GridView gv = (GridView)sender;
        foreach (GridViewRow lgvr in gv.Rows)
        {
            Label lblSupplyName = (Label)lgvr.FindControl("lblSupplyName");
            Label lblRItem = (Label)lgvr.FindControl("lblRItem");
            Label lblKeyNnode = (Label)lgvr.FindControl("lblKeyNnode");
            string txtShortName = lblSupplyName.Text;
            string strOCI_SD_KeyNode = lblRItem.Text;
            string strlblKeyNnode = lblKeyNnode.Text;
            lblSupplyName.ToolTip = txtShortName;
            txtShortName = FormatGridViewText(txtShortName, 1, true);
            lblSupplyName.Text = txtShortName;            lblRItem.ToolTip = strOCI_SD_KeyNode;
            strOCI_SD_KeyNode = FormatGridViewText(strOCI_SD_KeyNode, 3, true,2);
            lblRItem.Text = strOCI_SD_KeyNode;            lblKeyNnode.ToolTip = strlblKeyNnode;
            strlblKeyNnode = FormatGridViewText(strlblKeyNnode, 3, true, 2);
            lblKeyNnode.Text = strlblKeyNnode;
            //Status
            //string txtStatus = gvr.Cells[3].Text;
            //gvr.Cells[3].ToolTip = txtStatus;
            //txtStatus = FormatGridViewText(txtStatus, 3, true);
            //gvr.Cells[3].Text = txtStatus;            //CrtBy        }
    }

解决方案 »

  1.   

    楼上,我设置断点在DOMUtility.RegisterScript(strScr, this);这里.脚本就会注册成功.
    但是如果我没有设置任何断点.那边脚本就注册不成功.
      

  2.   

    /// <summary>
    /// 注册脚本函数script>/script>已经加载进去,不需要再加此句
    /// </summary>
    /// <param name="strScript">脚本</param>
    /// <param name="page">页面</param>
    public static void RegisterScript(string strScript, BasePage page)
    {
    String csname = DOMUtility.GenerateAGuid().ToString();
    Type cstype = page.GetType();
    strScript = "<script>" + strScript + "</script>";
    // Get a ClientScriptManager reference from the Page class.
    ClientScriptManager cs = page.ClientScript;
    cs.RegisterClientScriptBlock(cstype, csname, strScript);
    }
    ///////////////////注册脚本函数
      

  3.   


    CSDN - 专家门诊 - .NET技术 ASP.NET问题
    回复 | 推荐 | 收藏 | 专题 | 公告 | 管理 | 关闭窗口 
    主  题:  GridView注册脚本问题.直接运行脚本注册没有成功.但是调试的时候设置断点就会成功!
    作  者:  naturalth (自我批判,是思想、品德、素质、技能创新的优良工具)
    等  级: 
    信 誉 值:  99
    所属论坛:  .NET技术 ASP.NET
    问题点数:  200
    回复次数:  4
    发表时间:  2006-12-20 12:51:47


    代码如下.不知道为什么,现在不可以了.但是我一设置断点就会成功.请知道的朋友指导.解决方法.不知道为什么会有这事情发生.环境:vs2005
    我用Response.Write(strScr)有值输出.
    函数
    /// <summary>
    /// 注册脚本函数script>/script>已经加载进去,不需要再加此句
    /// </summary>
    /// <param name="strScript">脚本</param>
    /// <param name="page">页面</param>
    public static void RegisterScript(string strScript, BasePage page)
    {
    String csname = DOMUtility.GenerateAGuid().ToString();
    Type cstype = page.GetType();
    strScript = "<script>" + strScript + "</script>";
    // Get a ClientScriptManager reference from the Page class.
    ClientScriptManager cs = page.ClientScript;
    cs.RegisterClientScriptBlock(cstype, csname, strScript);
    }
    ///////////////////注册脚本页面操作private string TextBoxScrpit()
    {
    GridViewRow gvr = grdPayList.Rows[this.grdPayList.EditIndex];
    TextBox txtOCI_Amount = (TextBox)gvr.FindControl("txtOCI_Amount");//数量
    TextBox txtPrice = (TextBox)gvr.FindControl("txtOCIPrice");//单价
    TextBox txtOCI_SumMoney = (TextBox)gvr.FindControl("txtOCI_SumMoney");//总价
    string lstr = "";
    lstr += " function PriceChange()";
    lstr += "{";lstr += "var ltxtOCI_Amount=document.getElementById('" + txtOCI_Amount.ClientID + "').value;";//数量
    lstr += "var ltxtPrice=document.getElementById('" + txtPrice.ClientID + "').value;";lstr += @" var regdatetime=new RegExp('^\\d+(\\.\\d+)?$');if(ltxtOCI_Amount.match(regdatetime)==null)
    {
    alert('数量只可以输入大于零数字吧~!');
    document.getElementById('" + txtOCI_Amount.ClientID + "').focus();" +
    @"return false;
    }";lstr += @"
    if(ltxtPrice.match(regdatetime)==null)
    {
    alert('单价只可以输入大于零数字吧~!');
    document.getElementById('" + txtPrice.ClientID + "').focus();" +
    @"return false;
    }";
    lstr += "document.getElementById('" + txtOCI_SumMoney.ClientID + "').value=ltxtOCI_Amount * ltxtPrice ;";lstr += "}";return lstr;
    }脚本内容
      

  4.   

    1.检查一下客户端,看是没有输入<script 还是因为里面有错,而不能正确工作.
    2. BasePage  这个类是你自己写的类吧?里面有没有作了一些相关操作?
    3.在DOMUtility.RegisterScript(strScr, this); 这一句前,直接用
    this.ClientScript来输出看行不行?
      

  5.   

    txtOCI_Amount.Attributes.Remove("onchange");
    txtPrice.Attributes.Remove("onchange");
    txtOCI_Amount.Attributes.Add("onchange", "PriceChange();");
    txtPrice.Attributes.Add("onchange", "PriceChange();");
    string strScr = TextBoxScrpit();
    //Response.Write(strScr);
    DOMUtility.RegisterScript(strScr, this);注册脚本.如果不是调试的化是注册不成功的.
      

  6.   

    谢谢各位.问题已经解决.
    DOMUtility.RegisterScript(OpenWindows(), this);
    imbtRead.Attributes.Remove("onclick");
    imbtRead.Attributes.Add("onclick", "return OpenFindPrice();");
    此处我注册另外一个脚本.是一个函数
    而我另外一个函数即我刚才要注册的那个函数.
    我把这个两个脚本放在一起注册就成功了.