我的任务:设计一个服务器端控件,控件默认一行含几个文本框,
每行填加一个按钮add,点击按钮填加一行,
每行填加一个按钮del,点击按钮删除该行。要求:1。add及del在客户端运行,不能涉及页面提交。
2。可以服务器端对控件取值,比如我这个控件名字叫list,那可以用list.value取得用户填入的值。
3。所有取赋值要在控件内部完成,即不能利用引用该控件的页面的request来取得控件的值。就是说,如果有人用了我这个控件,在服务器端填加该控件,该控件自动根据设置将list.value存入数据库,也就是用户不干预取值过程。由控件自己处理。

解决方案 »

  1.   

    1.增减行可以采用JS脚本实现,类似的可以去搜吧
    2.对于客户端生成的控件要在服务器端取指比较难吧,我的方法是在提交前把动态生成控件的数据和ID按照一定分割符保存在一个隐藏的文本框,从而在服务器端操作这个文本框...
    3.采用我那个方法应该不需要用户干预了仅供参考~
      

  2.   

    谢谢楼上兄弟,不失为一种可行的方法
    另外,因为控件是动态调用,在他下面可能会有其他控件,这样的话下面控件的位置该如何控制呢。说明一下:这个控件只是某个大控件的子控件,大控件包括很多子控件,子控件的定位属于绝对定位那种,即postion:absolute那种。
    如果控件增加行的事件是在服务端处理,那可以重新计算位置重新生成大控件,但事件在客户端处理的情况下怎么办呢?
      

  3.   

    在客户端生成的控件,在服务器端是只能够通过Request.Form来获取的,因为客户端生成的控件不在原控件树中。当然,你可以把Request.Form的操作封装在整一个大的控件中,而控件对外暴露属性让控件使用者避免调用Request.Form。剩下的,只要你懂javascript,客户端添加删除很容易实现。需要注意的就是你这个控件要实现INamingContainer(因为它内含子控件),在客户端添加控件时name属性也要跟着Naming规则来做,否则假如有控件使用者在一个页面上放两个此控件的实例那就死掉了。
      

  4.   

    我还有个问题:
    我的控件中包括一个图片上传控件,就是HttpInputFile控件。我为其父控件定义了一个属性PostFile,计划当页面提交时将HttpInputFile的值存入PostFile,现在的问题是,只要涉及到页面刷新(非正常提交),我的HttpInputFile.PostFile就空了。
    我想在页面刷新的时候直接就更新PostFile 的值,我应该在什么时候赋值?页面刷新的时候是否会重新执行CreateChildControls和RendContent?我应该在哪里赋值?
      

  5.   

    用AJAX去做。
    或者用JS直接生成控件数组。
    然后再提交。我做过。
      

  6.   

    我还有个问题:
    我的控件中包括一个图片上传控件,就是HttpInputFile控件。我为其父控件定义了一个属性PostFile,计划当页面提交时将HttpInputFile的值存入PostFile,现在的问题是,只要涉及到页面刷新(非正常提交),我的HttpInputFile.PostFile就空了。
    我想在页面刷新的时候直接就更新PostFile 的值,我应该在什么时候赋值?页面刷新的时候是否会重新执行CreateChildControls和RendContent?我应该在哪里赋值?