ASP.NET - 由xslt转换生成的控件

时间:2008-11-26 01:05:15

标签: c# asp.net xml xslt

我通过xslt转换从我的asp.net页面动态生成控件。我将需要从后面的代码中引用这些控件。我想在创建过程中添加这些引用到列表/哈希表/任何内容(在我想的xslt文件中),以便我以后可以访问它们,我不知道如何做到这一点。 我将非常感谢任何建议, agnieszka

4 个答案:

答案 0 :(得分:2)

使用XSLT转换XML后,可以将输出传递给ASP.Net ParseControl方法,它将返回准备使用的控件。例如,此代码将在页面上放置两个按钮:

protected void Page_Load(object sender, EventArgs e)
{
    // Fetch your XML here and transform it.  This string represents
    // the transformed output
    string content = @"
        <asp:Button runat=""server"" Text=""Hello"" />
        <asp:Button runat=""server"" Text=""World"" />";

    var controls = ParseControl(content);

    foreach (var control in controls)
    {
        // Wire up events, change settings etc here
    }

    // placeHolder is simply an ASP.Net PlaceHolder control on the page
    // where I would like the controls to end up
    placeHolder.Controls.Add(controls);
}

答案 1 :(得分:0)

你能更好地了解你想要做什么吗?

XML&gt; XSLT&gt;生成aspx页面

听起来很接近重新发明Windows演示框架或XUL

或者是它 ASPX读取xml&gt;使用XSLT将DOM元素添加到页面... 听起来像AJAX

您想使用属性转换写出唯一ID http://www.w3schools.com/XSL/el_attribute.asp

答案 2 :(得分:0)

使用纯XSL解决方案可能会很棘手。

您可以调用一个模板,该模板迭代您正在使用的xml节点生成控件,并写出一个c#/ VB脚本块,将它们添加到您选择的容器中。

另一种选择可能是将msxsl:script添加到模板中,并使用c#或其他语言生成所需的输出。这有时比纯xsl解决方案更容易,但确实会带来性能成本。

看看umbraco的源代码可能是值得的,它充分利用了xsl,并且可能已经完成了你正在寻找的东西。

答案 3 :(得分:0)

感谢所有答案。

这就是我所做的(这不是我的代码,但我也是这样做的):

private void CreateControls() {     XPathDocument surveyDoc = new XPathDocument(Server.MapPath(“ExSurvey.xml”));

// Load the xslt to do the transformations
XslTransform transform = new XslTransform();
transform.Load(Server.MapPath("MakeControls.xslt"));

// Get the transformed result
StringWriter sw = new StringWriter();
transform.Transform(surveyDoc, null, sw);
string result = sw.ToString();

// parse the control(s) and add it to the page
Control ctrl = Page.ParseControl(result);
form1.Controls.Add(ctrl);

}

第一个解决方案(来自Generic Error)不够好,因为我需要识别控件,例如在xslt转换期间,我将创建3组控件,所有控件都具有不同的ID。我想从不同哈希表中的组中引用每个控件的引用,以便稍后我知道每个组中的控件。

最好的解决方案是在创建控件时以某种方式执行它(所以在xslt代码中...)但我不知道是否可能。