例如,现在在cs代码里有这样一段~
TextBox tb = new TextBox();
tb.Text = "aa";我要得到tb这个控件运行后生成的html。其实这个算作是一个类,但他是在System.Web.UI.WebControls.WebControl里的,也就可以看作控件了。又或者如果大家知道如何能得到用户控件运行后的html也行,我想要的也就是server控件运行后的html,但是要在代码里的,不是在ui里。大侠们帮帮手

解决方案 »

  1.   

    其实是ajax的问题,.net新出的ajax组件,如果要生成一个列表,只能用js一条一条html输出,不能用server控件,如果我能得到类似datagird生成出来的html,那问题就解决了。
      

  2.   

    先运行,在运行结果浏览器选"查看"->"源文件"
    这里有所有的控年最终html,包括复杂控件DataGrid等
      

  3.   

    是的,按一定模式生成的datagrid,在运行时生成的HTML代码都差不多,
    你没有必要在CS中用代码去返回datagrid的HTML代码,
    因为你是完全可以预测的,
    你可以在调试时点右键看一下网页的源码
    datagrid会转化为table
    格式大同小异的
      

  4.   

    ASP.NET的设计模式不推荐在运行的时候调用HTML。调用起来自然就比较困难了
    建议用其他的方法解决问题,或者索性不用服务器端控件啊
      

  5.   

    首先你自己 new 一个 htmlWriter,准备好把输出流写入文件、设备、还是string,然后调用 myControl.RenderControl(myHtmlWriter) 它就给你写出来了。
      

  6.   

    嘿,试了一下,总要求在Form和Page中。暂且可以如此:        Dim HW As New System.Text.StringBuilder
            Dim WW As New System.IO.StringWriter(HW)
            Dim WH As New Html32TextWriter(WW)
            Dim P As New Page
            Dim F As New HtmlForm
            P.Controls.Add(F)
            F.Controls.Add( myControl)
            P.RenderControl(WH)
      

  7.   

    不过,控件每一次render都是可能不同的,因为要根据环境生成代码。如果你把控件包装在自定义的类型中,就能通过重写 RenderControl 来截获每一次真实的输出值。截获页面的输出,可以这样:    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
            Dim HW As New System.Text.StringBuilder
            Dim WW As New System.IO.StringWriter(HW)
            Dim WH As New Html32TextWriter(WW)
            MyBase.Render(WH)
            '然后把HW写进自己的跟踪对象。
            writer.Write(HW)
        End Sub
      

  8.   

    楼主这个,我的项目有用到:每天下班前,把当天所有的加班申请记录 E-Mail 通知给主管代码如下://构建存放服务器控件 HTML 的 StringBuilder 
    System.Text.StringBuilder str = new System.Text.StringBuilder();
    System.IO.StringWriter sw = new System.IO.StringWriter(str);
    System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);
    this.DataGrid1.RenderControl(hw); //将已绑定查询结果的 DataGrid1 以 HTML 字串输出
    this.Label1.Text =str.ToString(); //查看效果
      

  9.   

    搂住能否先说明你在做什么?你想达到怎样的效果?你是不是希望一个普通控件,能够获取他Render后的HTML代码,然后不让这些HTML代码直接输出到Response,而是把他们再嵌套到Ajax那样的js代码里面输出?例如,你的页面是Ajax返回页,输出一个Button,但是这个Button不是要直接输出到HTML,而是要通过js把这些HTML追加到原来的页面上?如果是这样的话,你只需要创建一个TextWriter类,然后传递给控件的Render(),之后获取这个TextWriter的Stream的String,那就可以了。这个String也就是这个控件渲染的效果。更加好的办法就是,你继承这个控件,重写它的Render()方法,先交给base.Render()输出,然后再嵌套自己的js代码。