日期:2014-05-17  浏览次数:20435 次

还是javascript传参问题
JS代码:
function ShowOrHideControl(ControlClientID) {
            var Control = document.getElementById(ControlClientID);
            if (Control.style.display == "block") {
                Control.style.display = "none";
            }
            else Control.style.display = "block";
        }
html代码:
< input type="button" id=btn onclick="ShowOrHideControl('<%= dvLeft.ClientID %>')"/>

dvLeft是一个div,有runat="server"标记

这样写可以传的参数实际上是dvLeft的服务器控件ID,可以运行。
但是如果html代码换一下,把btn加一个runat="server"标记以后,传的参数就不是dvLeft的服务器控件ID了,
真搞不懂为什么。现在还是想将dvLeft的ClientID传过去,应该怎么写呢?
javascript server 传参 ClientID

------解决方案--------------------
帮顶!
------解决方案--------------------
何必要一定要家runat=server  
------解决方案--------------------
你用母版页了么?
------解决方案--------------------
你可以在page_load(或者、其实更好地是在Page_prerender)中写:

    btn.Attribute["onclick"]=string.Format("ShowOrHideControl('{0}');", dvLeft.ClientID);
------解决方案--------------------
如果有母版页 用户控件中使用
那么需要传递给前台ClientId才会被js正确引用(针对runat="server"的服务器控件)
------解决方案--------------------
< input type="button" id=btn runat=server />
<script>
document.getElementById("<%=btn.ClientID %>").onclick=function(e){
ShowOrHideControl('<%= dvLeft.ClientID %>')
};
</script>
------解决方案--------------------

------解决方案--------------------
http://www.cnblogs.com/volnet/archive/2008/01/08/1029699.html

加上runat后就把<自动转码为&lt;,认不出里面的code了,既然你一定要改成html控件加runat这种变态模式,就只能去cs文件中处理了,服务器控件本来也应该是这么操作的
------解决方案--------------------
Quote: 引用:

< input type="button" id=btn onclick="ShowOrHideControl('<%= dvLeft.ClientID %>')"/>
既然能运行,为什么btn非要加runat=server呢?
如果你非要用服务器控件,直接用现成的服务器控件多好?
在后台用该服务器控件的Attribute属性,把onclick事件加上.如:this.btn.Attribute.add("onclick",string.format("ShowOrHideControl('{0}')",dvLeft.ClientID));