不知能否用JS在PlaceHolder里动态添加用户控件,然后再在后台获得添加的控件的自定义属性?或者不用PlaceHolder控件,有什么别的好方法实现这个功能,最主要是不刷新?

解决方案 »

  1.   

    var p = document.getElementById("<%=panel1.ClientID%>");
    var html = p.innerHTML;
    p.innerHTML = html + '<asp:button id="button1" runat="server" text="jfdk" />';<asp:Panel id="panel1" runat="server"></asp:Panel>
      

  2.   

    js能够找到html里面的所有结点,也可以在结点下添加html控件;可是你怎么来保证服务器控件回传后来得到你要的效果;
      

  3.   

    好像不行啊!类型“Button”的控件“button1”必须放在具有 runat=server 的窗体标记内。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: 类型“Button”的控件“button1”必须放在具有 runat=server 的窗体标记内。源错误: 
    行 14:     function add()
    行 15:     {
    行 16:         var p = document.getElementById("<%=place.ClientID %>");
    行 17:         var html = p.innerHTML;
    行 18:         p.innerHTML = html + '<asp:button id="button1" runat="server" text="jfdk" />';
     
      

  4.   

    To-hy:
    想在后台用PlaceHolder.Controls的方法获得动态添加的控件,但好像找不到动态添加的,只能得到在Page_Load里添加的控件,郁闷了
      

  5.   

    你用JS完全可以随意思添加控件,也可以把控件里面想得到值传到服务器上,如果不想刷新就用AJAX吧。这个方法完全可以达到你想效果,源码我就懒的写了。相信不难。
      

  6.   

    忘了说一句了,如果你不想写Ajax,你可以用回调机制。难度就在javaScript上了,慢慢来。
      

  7.   

    那用Ajax怎么获得自定义控件的属性呢???
    把对象传给后台方法,再去获得属性??这样好像行不通吧
      

  8.   

    lz的意思好象是自定义属性在数据库里?不然干吗非得去“后台”获取?
    这样的话可用ajax通过传参数的方式获取属性值
    也可以用个<iframe id="attrFrm" src="getAttr.aspx?id=" style="visibility:hidden"></iframe>
    然后var attr = document.getElementById("attrFrm").contentWindow.document.documentElement.innerHTML;
    getAttr.aspx.cs
    page_load()
    {
    string sql = "select attr from attrTable where id="+Request["id"];
    Response.Write(DB.GetValue(sql));
    Response.End();
    }