将不同的ascx文件加载到DataList

时间:2013-07-31 07:02:08

标签: c# asp.net .net

我有datalist项目,我想从代码后面加载不同的用户控件。

<%@ 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库 但是无论我在页面加载后什么都看不到页面中的用户控件。 谢谢

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

    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;
    }