cra*_*ver 6 asp.net user-controls
我试图将用户控件呈现为字符串.应用程序设置为允许用户使用令牌,并在找到令牌的位置呈现用户控件.
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
Control uc = LoadControl("~/includes/HomepageNews.ascx");
uc.RenderControl(writer);
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
该代码呈现控件,但控件的Page_Load中调用的事件都没有触发.控制中需要一个Repeater才能开火.
Hau*_*uge 13
我一直在他的博客中使用Scott Guthrie提供的以下代码已有一段时间了:
public class ViewManager
{
public static string RenderView(string path, object data)
{
Page pageHolder = new Page();
UserControl viewControl = (UserControl) pageHolder.LoadControl(path);
if (data != null)
{
Type viewControlType = viewControl.GetType();
FieldInfo field = viewControlType.GetField("Data");
if (field != null)
{
field.SetValue(viewControl, data);
}
else
{
throw new Exception("ViewFile: " + path + "has no data property");
}
}
pageHolder.Controls.Add(viewControl);
StringWriter result = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, result, false);
return result.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
该object data参数允许将数据动态加载到用户控件中,并且可以用于通过阵列或类似的东西将多个变量注入控件.
此代码将触发控件中的所有正常事件.
关于Jesper Hauge