我试图将用户控件呈现为字符串.应用程序设置为允许用户使用令牌,并在找到令牌的位置呈现用户控件.
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();
该代码呈现控件,但控件的Page_Load中调用的事件都没有触发.控制中需要一个Repeater才能开火.
我一直在他的博客中使用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(); } }
该object data
参数允许将数据动态加载到用户控件中,并且可以用于通过阵列或类似的东西将多个变量注入控件.
此代码将触发控件中的所有正常事件.
你可以在这里读更多关于它的内容
关于Jesper Hauge