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