2008-11-26 32 views
1

我通過從xml文件進行xslt轉換,在我的asp.net頁面上動態生成控件。我將需要在後面的代碼中引用這些控件。我想將這些引用添加到列表/哈希表/創建過程中的任何內容(在xslt文件我想),以便我可以達到他們以後,我不知道如何做到這一點。 我將不勝感激任何建議, agnieszkaASP.NET - 通過xslt轉換生成的控件

回答

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); 
} 
+0

哈!然後,我從今天開始學習了一些新的有用的東西!:-) – 2008-11-26 10:15:22

0

你可以更好地瞭解你想做什麼?

XML> XSLT>產生aspx頁面

聽起來接近重塑的Windows Presentation Framework或XUL

或者是 ASPX讀取XML>使用XSLT DOM元素添加到網頁... 聲音如AJAX

你想用寫出來一個唯一的ID屬性變換 http://www.w3schools.com/XSL/el_attribute.asp

0

可能會非常棘手,機智h純粹的XSL解決方案。

您可能需要調用一個迭代所使用的xml節點的模板來生成控件,然後寫出一個將它們添加到所選容器的c#/ VB腳本塊。

另一種選擇是將msxsl:腳本添加到您的模板,並使用c#或其他語言生成所需的輸出。這有時比純xsl解決方案更容易,但確實伴隨着性能成本。

看看umbraco的源代碼可能是值得的,它使用xsl非常厲害,可能已經在做你正在尋找的東西。

0

感謝您的所有答案。

這是我做的(這不是我的代碼,但我做同樣的方式):

私人無效CreateControls(){ 的XPathDocument surveyDoc =新的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); 

}

首先溶液(來自通用錯誤)不夠好,因爲我需要確定的控件,例如XSLT轉換期間我將創建3組的控制,所有具有不同的ID。我想將不同散列表中的每個控件從一個組中引用,以便稍後我會知道每個組中的哪些控件。

最好的解決方案是在創建控件時做到這一點(所以在xslt代碼中),但我不知道它是否可能。