0

我有数据列表项,我想从后面的代码中加载不同的用户控件。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TextQuestion.ascx.cs" Inherits="QuestionnaireUI.TextQuestion" %>
<div>
 Name: <asp:Label ID="CategoryNameLabel" runat="server" 
          Text='<%# Eval("Description") %>'>
      </asp:Label>
      <input type="text" />
</div>

应该将用户控件添加到交替模板的行

dlSubjects.AlternatingItemTemplate = Page.LoadTemplate("TextQuestion.ascx");

这个想法取自 msdn 库,但无论如何我在页面加载后都看不到页面中的用户控件,即使在页面源中也看不到。谢谢

4

2 回答 2

0

另一种动态方法是将一个 Literal 控件插入 DataListItem 模板,另一方面,将控件包装在 Empty ASPX 页面中,最后在后面的代码中,将 IFrame 添加到该 Literal 中,

YourLiteral.Text="<iframe src='ExternalControl.aspx'></iframe>";

这也将使您能够传递 QueryString 参数。

于 2013-07-31T08:15:21.547 回答
0

您可以使用以下方法获取控件的html并将其打印到您的数据列表中。

    public static string LoadControlToHtml(Page page, UserControl userControl)
    {
        string html = null;

        try
        {

            HtmlForm form = new HtmlForm();
            form.Controls.Add(userControl);
            page.Controls.Add(form);

            MemoryStream ms = new MemoryStream();
            StreamWriter sw = new StreamWriter(ms);

            HttpContext.Current.Server.Execute(page, sw, false);
            sw.Flush();
            string sa = sw.Encoding.GetString(ms.ToArray());
            sw.Close();
            html = HtmlHelper.RemoveFromTag(sa);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
        }
        return html;
    }
于 2013-07-31T09:46:42.937 回答