Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 动态生成html/asp_Asp.net_Html_Vb.net - Fatal编程技术网

Asp.net 动态生成html/asp

Asp.net 动态生成html/asp,asp.net,html,vb.net,Asp.net,Html,Vb.net,我有一个treeview类型的文件夹/链接结构,它是从表中填充的。我试图做的是通过我的记录集进行过程性循环,在page_init中生成html,然后尝试绑定控件。当我尝试将链接按钮添加到html中的占位符时,它似乎永远也找不到它们 我可能在这里遗漏了一些基本的东西,我看到的所有示例都绑定了一个已经在页面上的控件,难道我自己无法在页面_init中生成html吗 范例 Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.

我有一个treeview类型的文件夹/链接结构,它是从表中填充的。我试图做的是通过我的记录集进行过程性循环,在page_init中生成html,然后尝试绑定控件。当我尝试将链接按钮添加到html中的占位符时,它似乎永远也找不到它们

我可能在这里遗漏了一些基本的东西,我看到的所有示例都绑定了一个已经在页面上的控件,难道我自己无法在页面_init中生成html吗

范例

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
  content_div.Innerhtml = "<asp:PlaceHolder id=""test"" runat=""server"" ></asp:PlaceHolder>"
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
   Dim _linkb As New LinkButton
   _linkb.ID = "lb_cat_" & cat.uID
   _linkb.Attributes.Add("href", "javascript: sltoggle('cat_" & cat.uID & "');")
   _linkb.Attributes.Add("Text", "Expand/Close")
   _linkb.Attributes.Add("runat", "server")
   Dim ph As PlaceHolder = DirectCast(TRIEDEVERYTHINGUNDERTHESUN.FindControl("test"), PlaceHolder)
   ph.Controls.Add(_linkb)
End Sub
Protected Sub Page_Init(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Init
content_div.Innerhtml=“”
端接头
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)
Dim_linkb作为新的LinkButton
_linkb.ID=“lb_cat_”&cat.uID
_Add(“href”,“javascript:sltoggle('cat_“&cat.uID&“);”)
_linkb.Attributes.Add(“文本”、“展开/关闭”)
_Add(“runat”、“server”)
Dim ph As PlaceHolder=DirectCast(TRIEDEVERYTHINGUNDERTHESUN.FindControl(“测试”),占位符)
ph.Controls.Add(_linkb)
端接头
如果有人能给我指出正确的方向,我将不胜感激

问候,, 皮特

更新-完整代码

Private Sub load_dynamic_file_view()
    Dim _sb As New StringBuilder
    Dim _sfc As New sf_file_category, _sff As New sf_file
    _lsfc = _sfc.get_all_sf_file_category
    _lsff = _sff.get_active_sf_files

    Dim _list_root As List(Of sf_file_category) = _lsfc.FindAll(Function(p) p.parent_id = 0)
    If Not _list_root Is Nothing Then
        _sb.Append("<strong>File Downloads</strong><br />")
        _sb.Append("<div class=""indent-me"" ><br />")
        For Each cat As sf_file_category In _list_root
            'header/Open Link
            Dim _linkb As New LinkButton
            _linkb.ID = "lb_cat_" & cat.uID
            _linkb.Attributes.Add("href", "javascript: sltoggle('cat_" & cat.uID & "');")
            _linkb.Attributes.Add("Text", "Expand/Close")
            _linkb.Attributes.Add("runat", "server")
            Dim ph As PlaceHolder = DirectCast(Me.Master.FindControl("lb_cat_" & cat.uID), PlaceHolder)
            ph.Controls.Add(_linkb)

            _sb.Append(HtmlDecode(cat.name) & " &nbsp;&nbsp;&nbsp;<Asp:PlaceHolder id=""lb_cat_" & cat.uID & """ runat=""server"" /><br />")
            '_sb.Append("<div id=""cat_" & cat.uID & """ class=""toggle-hide"">")
            '_sb.Append(add_child_folder(cat.uID, content))
            '_sb.Append(show_files(cat.uID, content))
            '_sb.Append("</div><div class=""clearfix"" />")
        Next
        _sb.Append("</div>")
        _sb.Append("<br /><br />")
    End If

    content_div.InnerHtml = _sb.ToString
End Sub

Private Function add_child_folder(ByVal catid As Long, ByRef content As ContentPlaceHolder) As String
    Dim _sb As New StringBuilder
    Dim _cl As List(Of sf_file_category) = _lsfc.FindAll(Function(p) p.parent_id = catid)
    If Not _cl Is Nothing Then
        _sb.Append("<div class=""indent-me"" ><br />")
        'For Each _c As sf_file_category In _cl.OrderBy(Function(p) p.view_order)

        _cl.Sort(Function(c1 As sf_file_category, c2 As sf_file_category)
                     Return c1.view_order.CompareTo(c2.view_order)
                 End Function)

        For Each cat As sf_file_category In _cl
            Dim _linkb As New LinkButton
            _linkb.ID = "lb_cat_" & cat.uID
            _linkb.Attributes.Add("href", "javascript: sltoggle(&#39;cat_" & cat.uID & "&#39;);")
            _linkb.Attributes.Add("Text", "Expand/Close")
            _linkb.Attributes.Add("runat", "server")
            Content.Controls.Add(_linkb)

            _sb.Append(HtmlDecode(cat.name) & "&nbsp;&nbsp;&nbsp;<Asp:LinkButton id=""lb_cat_" & cat.uID & """ runat=""server"" Text=""Expand/Close"" href=&#39;javascript: sltoggle(&#39;cat_" & cat.uID & "&#39;);&#39; /><br />")
            '_sb.Append("<div id=""cat_" & cat.uID & """ class=""toggle-hide"">")
            _sb.Append(add_child_folder(cat.uID, content))
            _sb.Append(show_files(cat.uID, content))
            '_sb.Append("</div><div class=""clearfix"" >")
        Next
        _sb.Append("</div><br />")
    End If

    Return _sb.ToString
End Function

Private Function show_files(ByVal catid As Long, ByRef content As ContentPlaceHolder) As String
    Dim _sb As New StringBuilder
    Dim _fl As List(Of sf_file) = _lsff.FindAll(Function(p) p.file_category = catid)
    If Not _fl Is Nothing Then
        _sb.Append("<div class=""indent-me"" ><br />")
        For Each _f As sf_file In _fl
            Dim _linkb As New LinkButton

            _linkb.ID = "file_" & _f.uID
            _linkb.Attributes.Add("onCommand", "download_file")
            _linkb.Attributes.Add("CommandArgument", _f.uID.ToString)
            _linkb.Attributes.Add("Text", _f.file_name)
            _linkb.Attributes.Add("runat", "server")
            AddHandler _linkb.Command, AddressOf download_file
            content.Controls.Add(_linkb)

            _sb.Append("<asp:LinkButton id=""file_" & _f.uID & """ runat=""server"" onCommand=""download_file"" commandArgument=""" & _f.uID & """ Text=""" & _f.file_name & """ /><br />")
        Next
        _sb.Append("</div><br />")
    End If
    Return _sb.ToString
End Function
私有子加载\u动态\u文件\u视图()
将某人定为新的架线工
Dim_sfc作为新sf_文件类别,sff作为新sf_文件
_lsfc=\u sfc.get\u所有\u sf\u文件\u类别
_lsff=\u sff.get\u活动\u sf\u文件
Dim\u list\u root As list(属于sf\u文件\u类别)=\u lsfc.FindAll(函数(p)p.parent\u id=0)
如果不是_list _root则为空
_sb.追加(“文件下载
”) _某人追加(“
”) 对于根目录中的每个类别作为sf文件 '标题/打开链接 Dim_linkb作为新的LinkButton _linkb.ID=“lb_cat_”&cat.uID _Add(“href”,“javascript:sltoggle('cat_“&cat.uID&“);”) _linkb.Attributes.Add(“文本”、“展开/关闭”) _Add(“runat”、“server”) Dim ph As PlaceHolder=DirectCast(Me.Master.FindControl(“lb_cat_”)和cat.uID),占位符 ph.Controls.Add(_linkb) _sb.追加(HtmlDecode(类别名称)和“
”) “\给某人加上(“”) “\u sb.Append(添加子文件夹(cat.uID,content)) '\u sb.Append(显示文件(cat.uID,content)) “\给某人加上(“”) 下一个 _某人加上(“”) _某人追加(“

”) 如果结束 content\u div.InnerHtml=\u sb.ToString 端接头 私有函数将子文件夹(ByVal catid为长,ByRef内容为内容占位符)添加为字符串 将某人定为新的架线工 Dim\u cl As List(sf\u文件\u类别)=\u lsfc.FindAll(函数(p)p.parent\u id=catid) 如果不是,那么cl什么都不是 _某人追加(“
”) '对于_cl.OrderBy(函数(p)p.view_顺序)中的每个_cas sf_文件_类别) _cl.Sort(功能(c1为sf_文件类别,c2为sf_文件类别) 返回c1.查看顺序。比较(c2.查看顺序) 终端功能) 对于每个类别,作为sf\U文件\U类别 Dim_linkb作为新的LinkButton _linkb.ID=“lb_cat_”&cat.uID _linkb.Attributes.Add(“href”,“javascript:sltoggle(';cat#“&cat.uID&“';);”) _linkb.Attributes.Add(“文本”、“展开/关闭”) _Add(“runat”、“server”) Content.Controls.Add(_linkb) _sb.追加(HtmlDecode(类别名称)和“
”) “\给某人加上(“”) _sb.追加(添加子文件夹(cat.uID,content)) _sb.追加(显示文件(cat.uID,content)) “\给某人加上(“”) 下一个 _某人追加(“
”) 如果结束 使某人回到弦上 端函数 私有函数将_文件(ByVal catid为长,ByRef content为ContentPlaceHolder)显示为字符串 将某人定为新的架线工 Dim\u fl As List(sf\u文件的)=\u lsff.FindAll(函数(p)p.file\u category=catid) 如果不是,那么fl什么都不是 _某人追加(“
”) 对于每个作为sf文件的_f,在_fl中 Dim_linkb作为新的LinkButton _linkb.ID=“文件”&\u f.uID _linkb.Attributes.Add(“onCommand”,“下载文件”) _Add(“CommandArgument”,\f.uID.ToString) _linkb.Attributes.Add(“文本”,“文件名”) _Add(“runat”、“server”) AddHandler\u linkb.Command,下载文件的地址 content.Controls.Add(_linkb) _某人追加(“
”) 下一个 _某人追加(“
”) 如果结束 使某人回到弦上 端函数
看起来您正在尝试向
内容分区添加占位符,但是,您所做的是将标记呈现为HTML内容

我不知道什么类型的控件
content\u div
,但您不能试试:

content_div.controls.add(new placeholder() { ID = "test" });
这将允许您在
content\u div
控件中查找控件

然而,对您来说,更简洁的解决方案可能是:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
   Dim _linkb As New LinkButton
   _linkb.ID = "lb_cat_" & cat.uID
   _linkb.Attributes.Add("href", "javascript: sltoggle('cat_" & cat.uID & "');")
   _linkb.Attributes.Add("Text", "Expand/Close")
   //you don't need this when using code behind
   //_linkb.Attributes.Add("runat", "server")

   //this will add your linkbutton to the content_div control
   content_div.Controls.Add(_linkb)
End Sub

如果早一点给出,您就会发现它是一种使用asp控件动态构建页面的有用方法

只生成HTML标记,不生成ASP.Net标记,因为浏览器无法解析它们

我认为你的代码应该是

content_div.Innerhtml = "<div id='test'></div>"
content\u div.Innerhtml=“”
占位符控件只是一个占位符,它不等于div HTML标记。
例如,我在这里给出了div标记。

asp.net控件作为文本添加到页面中是未知的,因此没有为其存储viewstate/对象,因此使用Findcontrol永远找不到它

使用控件的对象并将其添加到父控件的控件集合 e、 g


一旦您在Render事件之前添加了它,它的状态将被保存并可访问。

您的完整代码显示的是,您的构建需要大量的HTM字符串
div.Controls.Add(new PlaceHolder() { ... });
new HtmlGenericControl("div") instead of <div></div>
new HtmlAnchor() OR new LinkButton() instead of <a></a>
<ul>
    <li>
        <a href="root.htm">ROOT</a>
        <ul>
            <li>
                <a href="levelone">LEVEL 1</a>
            </li>
        </ul>
    </li>
</ul>
'Menu Holder
Dim treeStruct As HtmlGenericControl("ul")

'Root
Dim branch As HtmlGenericControl("li")
Dim branchItem as HtmlAnchor("a")

'Level 1 
Dim subLevel As HtmlGenericControl("ul")
Dim subBranch As HtmlGenericControl("li")
Dim subBranchItem as HtmlAnchor("a")

'Setup Level 1
subBranchItem.InnerText = "LEVEL 1"
subBranchItem.Href = "levelone"

subBranch.Controls.Add(subBranchItem)
subLevel.Controls.Add(subBranch)

'Setup Root
branchItem.InnerText = "ROOT"
branchItem.Href = "root.htm"

'Add Link To Root
branch.Controls.Add(branchItem)
'Add Sub Branch To Root
branch.Controls.Add(subLevel)

treeStruct.Controls.Add(branch)