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