问题如下:
服务器控件放置在模板页中,<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
执行以后:
<input name="ctl00$ContentPlaceHolder1$txtName" type="text" id="ctl00_ContentPlaceHolder1_txtName" />这样javascript脚本很不好操作,有没有办法让他的id和name运行后不改变呢?
(注:如果不使用模板,做一个简单页面,服务器控件的id运行后不会改变。)

解决方案 »

  1.   

    你在客户端调JS时可以直接传this过去不就行了
    你也 可以*.ClientID
    ---------------------------
    其他好像没什么好方法
      

  2.   

    你写后台代码时用 this.txtName 
    就能获取客户端输入的值
      

  3.   

    据我所知,目前没办法,生成的HTML的ID肯定带ctl00_Content_
      

  4.   

    貌似没有办法,GridView里面的控件的ClientID是只读的
    生成出来的每行的ID倒是可以自己定义ID
            for (int i = 0; i < GridView1.Rows.Count; i++)
            {
                GridView1.Rows[i].Attributes["id"] = "mytr" + i.ToString(); 
            }
      

  5.   

    把你操作那个控件的JS从后台写入就可以了。this.Response.Write("<script>javascript:document.getElementById('" + TextBox1.ClientID + "')</script>");如果出发事件的是TextBox本身的话更好办。只要在JS中
    oEl = event.srcElement;
    那么oEl就是触发事件的控件,那样就不用getElementById了
      

  6.   

    不可能禁止这个功能,如果能禁止,那ASP.NET就难做了,呵呵。用ClientId来取客户端id进行操作吧
      

  7.   

    var obj=document.getElementById("<%=TextBox1.ClientID%");
      

  8.   

    为了保证html内id的唯一性才这么做的 怎么会是问题
    Control.ClientID返回的就是你要的id
      

  9.   

    我的解决方法:
    在控件旁边加一个<div id="这里的ID有规律" />,如:
    <asp:TextBox ID="txtName" runat="server"></asp:TextBox><div id="myDiv_1" />在js中:
    document.getElementById("myDiv_1").previousSibling来引用就可以了
      

  10.   


    我的解决方法:
    在控件旁边加一个<div id="这里的ID有规律" />,如:
    <asp:TextBox ID="txtName" runat="server"></asp:TextBox><div id="myDiv_1" />在js中:
    document.getElementById("myDiv_1").previousSibling来引用就可以了
    -------------
    真是好方法。