请教:关于web用户自定义控件的问题

missakissy 2005-10-28 04:31:50
我自定义了一个web控件,主要实现无刷新三级地区级联下拉。

当我在aspx页面上使用一个UC控件的时候正常,一旦定义2个以上那么只有第一个控件可用,其余都不行。我估计是因为定义多个控件时,控件里的javascript代码解析后就出现重复现象,导致不能正常使用。

请问有没有什么解决方法呢?
...全文
153 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
missakissy 2005-10-31
  • 打赏
  • 举报
回复
在控件定义了一个javascript方法如下:
var AreaControlID;//控件id
function DistControlID(ControlID)
{
AreaControlID = ControlID;
}

当在page中定义多个这个用户控件时,我发现从第二个控件开始每个AreaControlID的值都是第一个控件的id,我想可能是这个全局变量的原因导致下面的控件不能正常使用。

请问有何解决办法呢?
missakissy 2005-10-31
  • 打赏
  • 举报
回复
楼上的可否说详细点啊,INamingContainer是个什么东西,该如何使用呢?
另外javascript需要改动么?
missakissy 2005-10-31
  • 打赏
  • 举报
回复
我现在在每个方法里都跟了一个控件id作为参数,能够解决问题,达到预期的目的。不过不知道这样会不会有什么弊端?
pupo 2005-10-31
  • 打赏
  • 举报
回复
所以你需要重新考虑 哪些脚本块可以公用就用RegisterClientScriptBlock输出一次,哪些不能公用的函数,变量,控件元素的就在前面加个this.UniqueID作为脚本中的唯一名称
pupo 2005-10-31
  • 打赏
  • 举报
回复
我怎么成星的,用不着你来郁闷。


RegisterStartupScript和RegisterClientScriptBlock只适合输出一些公用的的脚本,防止脚本被重复输出。如
<script language=javascript>
function AlertMsg(msg)
{
Alert(msg);
}
</script>
因为它只需要输出一次。

很多控件输出JavaScript脚本就是为了操作本控件内的元素或用输出的变量保持状态信息,所以并不实用,
INamingContainer可以,虽然有规律如ctl01,ctl2...,但是感觉麻烦,也不好控制。

所以可以直接在一下函数,变量,元素前面加上控件的唯一ID以与同类控件作区别

String scriptString = "<script language=JavaScript> function "+ this.UniqueID +"DoClick() {";
scriptString += "document.all."+ this.UniqueID +"show.value='Welcome to Microsoft .NET'}<";
scriptString += "/";
scriptString += "script>";

output.Write(scriptString);
output.Write("<input type='text' id='"+ this.UniqueID +"show'>");
output.Write("<input type='button' value='ClickMe' onclick='"+ this.UniqueID +"DoClick()'>");

saucer 2005-10-28
  • 打赏
  • 举报
回复
>>>我估计是因为定义多个控件时

让你的控件实现一个marker interface叫INamingContainer

public class YourControl : WebControl, INamingContainer
{
//...
}


这样就能保证不同控件里的子控件在客户端的ClientID都不一样,当然,这么做后,你的Javascript就要小心了,一般需要通过控件输出子控件的ClientID
  • 打赏
  • 举报
回复
使用RegisterStartupScript和RegisterClientScriptBlock,特别看看第一个参数的解释。

楼上这样回答问题也能星,我们郁闷死了。

jxufewbt 2005-10-28
  • 打赏
  • 举报
回复
那就不要用用户控件,用iframe
missakissy 2005-10-28
  • 打赏
  • 举报
回复
控件都加了ID,问题是function会重复出现,这样会不会导致使用无效呢?
pupo 2005-10-28
  • 打赏
  • 举报
回复
javascript 里面的变量函数,html元素的ID 都加一个控件ID的前缀,使之成为唯一
humin1906 2005-10-28
  • 打赏
  • 举报
回复
如果是javascript的原因,那你就去看看源文件,问题在哪,
按常理UC控件的多于少是不影响的

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧