如何使用字符串可以转换UserControl

时间:2009-10-08 02:51:11

标签: c# asp.net rendering user-controls

我是否可以用UserControl替换字符串?

除了LoadControl并将其添加到另一个控件,如页面或占位符。

原因是用户在页面上添加了一个内容并放了一个像{uc:test}这样的字符串,我想解析这个文本并用UserControl替换{uc:test}。

换言之; 用户输入将是“bla bla bla {uc:test} bla bla”,当我从数据库中检索它时如何注入usercontrol并将其替换为{uc:test}

感谢。

2 个答案:

答案 0 :(得分:1)

尝试使用LoadControl方法动态加载用户控件,并在回发期间将它们添加到页面中。

Control someControl = LoadControl("~/SomeControl.ascx");

您可以...将其添加到您网页的控件集合中:

        this.Page.Controls.Add(someControl);

或者......将其添加到另一个控件的控件集合

        someExistingPlaceHolder.Controls.Add(someControl);

如何使用正则表达式获取这样的标签

List<string> fields = new List<string>(); 
foreach(Match match in Regex.Matches(str, @"\{([^\}]*)\}")) { 
    fields.Add(match.Groups[1].Value); 
} 

答案 1 :(得分:0)

如果您想要尊重用户输入的所有,包括他们已包含的任何控件参考,请使用ParseControl

string markup = input.Replace("{","<").Replace("}",">");
Control control = this.Page.ParseControl(markup);

this.Page.Controls.Add(control);

这将创建一个新的Control,它将所有文本(“blah blah”)表示为Literal子控件,并创建<uc:test>的新实例作为嵌套子控件。