我使用formview来完成新增和编辑工作,insert和edit模版里边的控件ID都是一样的,都是修改其中一个之后复制到另一个,因为控件太多,一个个改太麻烦,而且控件上还绑定有一些事件,如果两个模版里控件的ID不同就要把这些事件处理函数写两次,之前一直都是这么用的,没有问题的。因为而面上刷新的问题,现在在formView里边放了个updatePanel,然后把原来的部分控件放到里边做无刷新,结果编译的时候就提示控件已经存在,就是重名了。我在想是不是.net在编译的时候特殊处理了formView控件,只要是formView控件里不同模版下同名的子控件编译时不检查重名,但把控件放进updatePanel之后就不认了,虽然updatePanel也是在formView里的。这个问题搞了几天了,baidu,google也没有答案,是不是我这样使用formView的方式有错?居然没有人遇到我相同的问题。

解决方案 »

  1.   

    建议你看看INamingContainer,在MSDN里看看这个概念。INamingContainer内外的两个控件可以重名,不同INamingContainer内的两个控件也可以重名,但是同一个INamingContainer内的两个控件重名就会冲突。重名是指ID相同。FormView是INamingContainer。UpdatePanel不是。
      

  2.   

    估计你是这样做了:UpdatePanel1
      TextBox1
    UpdatePanel2
      TextBox1因为UpdatePanel不是INamingContainer,所以那两个TextBox1就会冲突。然而这样是没问题的:FormView
      EditTemplate
        TextBox1
      InsertTemplate
        TextBox1这两个Template都是INamingContainer,不造成任何冲突。
      

  3.   

    另外,你说把UpdatePanel放在FormView内部,事实上不建议这样做,用UpatePanel把整个FormView包裹起来就好了。
      

  4.   

    非常感谢你的回复,还是有点问题,我把updatePanel放到FormView外面之后,里边的tab控件在进行了ajax操作之后就失效了(这个控件不是ajaxToolkit控件,是一段js代码生成的),但如果我使用自带的tabContainer时,tabContainer里边的控件又会产生重名的问题,有解决方法吗?