当前位置:  开发笔记 > 后端 > 正文

以编程方式将用户控件加载到html文本编写器中

如何解决《以编程方式将用户控件加载到html文本编写器中》经验,为你挑选了1个好方法。

我试图将用户控件呈现为字符串.应用程序设置为允许用户使用令牌,并在找到令牌的位置呈现用户控件.

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才能开火.



1> Hauge..:

我一直在他的博客中使用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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有