代码之家  ›  专栏  ›  技术社区  ›  James Campbell

从XSLT生成的ASP.NET控件不会显示在作为文本控件添加的面板中

  •  0
  • James Campbell  · 技术社区  · 16 年前

       XElement Categories =
                           new XElement("Promotions",
                               from b in db.GetPromotions()
                            select new XElement("Promotion",
                                new XElement ("Category",b.CategoryName),
                                   new XElement("Client",b.ClientName),
                                   new XElement("ID",b.ID),
                                   new XElement("Title",b.Title)));
    
                        XDocument mydoc = new XDocument();
                        mydoc.Add(Categories);
    
                        try
                        {
                                // Load the style sheet.
                                XslTransform xslt = new XslTransform();
                                xslt.Load(@"C:\Web\DesktopModules\Promotions\TransList.xslt");
    
                                // Execute the transform and output the results to a writer.
                                StringWriter sw = new StringWriter();
                                //XsltSettings mysettings = new XsltSettings();
                                XmlWriterSettings mysettings = new XmlWriterSettings();
    
                                xslt.Transform(mydoc.CreateReader(),null, sw);
    
                                String mstring = sw.ToString();
    

    它生成以下字符串:

    <ul id="red" class="treeview-red" xmlns:asp="http://schemas.microsoft.com/ASPNET/20">
      <li><span>Arts &amp; Entertainment</span><ul>
          <li><span>Client 1</span><ul>
              <li><span><asp:LinkButton ID="LinkButton2" runat="server" OnClick="LinkClicked" Text="Get your Free 2" /></span></li>
              <li><span><asp:LinkButton ID="LinkButton4" runat="server" OnClick="LinkClicked" Text="Get your Free 4" /></span></li>
              <li><span><asp:LinkButton ID="LinkButton5" runat="server" OnClick="LinkClicked" Text="Get your Free 5" /></span></li>
            </ul>
          </li>
        </ul>
      </li>
      <li><span>Community &amp; Neighborhood</span><ul>
          <li><span>Client 2</span><ul>
              <li><span><asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkClicked" Text="Get your Free 1" /></span></li>
            </ul>
          </li>
        </ul>
      </li>
      <li><span>Education</span><ul>
          <li><span>Client 3</span><ul>
              <li><span><asp:LinkButton ID="LinkButton3" runat="server" OnClick="LinkClicked" Text="Get Your Free 3" /></span></li>
            </ul>
          </li>
        </ul>
      </li>
      <li><span>Home &amp; Garden</span><ul>
          <li><span>Client 4</span><ul>
              <li><span><asp:LinkButton ID="LinkButton6" runat="server" OnClick="LinkClicked" Text="Get your Free 6" /></span></li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>
    

    现在,我获取字符串并将其添加到面板中,该面板是多视图控件中视图的一部分:

    Panel1.Controls.Add(new LiteralControl(mstring));
    

    Control myctrl = Page.ParseControl(mstring);         
    Panel1.Controls.Add(myctrl);
    

    我把它作为一个控件:

    a id="dnn_ctr954_ViewPromotions_LinkButton2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;dnn$ctr954$ViewPromotions$LinkButton2&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">Get your Free 2</a>
    

    它没有按预期的方式工作,dotnetnuke正在使用解析控件做一些疯狂的事情。它似乎要删除我的LinkClicked事件。

    3 回复  |  直到 16 年前
        1
  •  1
  •   James Campbell    16 年前

    好了,这就行了:

     String mstring = sw.ToString();
     var myctrl = ParseControl(mstring);
    
          foreach (Control Control in myctrl.Controls)
                {
                     if (Control is LinkButton)
                           {
                                LinkButton lb = (LinkButton)Control;
                                lb.OnClientClick = "LinkClicked";
                           }
                                 Panel1.Controls.Add(myctrl);
                }
    
        2
  •  0
  •   sashaeve    16 年前

    服务器控件的说明:

    XML Web服务器控件用于 未格式化或未使用 (可选)指定XSLT样式表 之前格式化XML文档的 它显示在XML服务器中 控制XML Web服务器控件 属于 您可以添加XML Web服务器控件 通过拖动该控件来创建Web窗体 从工具箱的“Web窗体”选项卡。

    XML Web服务器控件具有 以下特性:

    XSLT文件的URL,其中 显示之前需要的格式 在网络表单中。

    对对象的引用 XMLDocument类。这个物业是

    转换:允许您指定 XMLTransform类。这个物业是

        3
  •  0
  •   devio    16 年前

    在aspx文件中编写的代码,例如

    <asp:LinkButton ID="LinkButton1" runat="server">
    

    相反,ASP.Net编译器将此标记转换为C#/.Net代码,该代码在运行时创建控件,然后根据控件的状态和数据生成HTML输出。

    将asp标记添加到文字控件中只会产生相同的标记,浏览器无法显示该标记,因为标记asp:LinkButton未在HTML中定义(通过在浏览器中选择“查看源”进行检查)