【发布时间】:2011-04-13 08:56:20
【问题描述】:
我是 XML/XSLT 的新手。我所做的是创建了一个带有一些列表的 XML 文件,并使用 XSLT 对其进行了转换。
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
this.form1.Controls.Add(Xml1);
Button btnSubmit = new Button();
btnSubmit.Text = "Submit";
this.form1.Controls.Add(btnSubmit);
btnSubmit.Click += new System.EventHandler(btnSubmit_Click);
Xml1.DocumentSource = "~/xml/XML_F52E2B61-18A1-11d1-B105-00805F49916B1.xml";
Xml1.TransformSource = "~/KPI_table.xslt";
//Together, the Xml1.DocumentSource and the Xml1.TransformSource will display a
//list of items with a dropdownlist each.
}
private void btnSubmit_Click(Object sender, System.EventArgs e)
{
foreach (Control c in form1.Controls) //or is it possible to access the controls
//inside XML1 here?
{
//This is where I need to access the controls inside the Xml1 object.
}
}
当我尝试调试/跟踪程序时,我发现 foreach 循环只看到 3 个控件(System.Web.UI.LiteralControl、System.Web.UI.WebControls.Xml 和 System.Web.UI.WebControls.Button)。而且我找不到进入 XXML 对象/控件内部控件的方法,因此我可以获得 DropdownLists/options 的SelectedValue。我如何才能访问 Xml1 对象/控件中的控件??
更新 2:这是生成的 HTML 代码:
<body>
<form method="post" action="Main.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZCn80c6JtFOE8ISKTFArpEqY4qC8tA9LkNAs7gn6n6Zu" />
</div>
<div class="aspNetHidden">
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLm9oEzAqDAiY0LmVXxKZ8kddyJnX1LgEhJf4qGDJE14PdWmMUYC7LLAAk=" />
</div>
<div>
</div>
<table id="tbl1" runat="server" xmlns:asp="remove">
<tr>
<td>BEHAVIOR</td>
</tr>
<tr>
<td>Stellar KPIs</td>
</tr>
<tr>
<td>Customer Demeanor at Start of call:</td>
<td>
<select id="ddl_3" runat="server" AutoPostBack="true" onchange="getvalue(this);">
<option value="0">Select</option>
<option value="A"> Audibly Happy</option>
<option value="N"> Neutral</option>
<option value="I"> Irate</option>
<option value="R"> At risk</option>
</select>
</td>
</tr>
<tr>
<td>Customer Demeanor at End of call:</td>
<td>
<select id="ddl_8" runat="server" AutoPostBack="true" onchange="getvalue(this);">
<option value="0">Select</option>
<option value="A"> Audibly Happy</option>
<option value="N"> Neutral</option>
<option value="I"> Irate</option>
<option value="R"> At risk</option>
</select>
</td>
</tr>
更新 3:这是呈现的 HTML 代码的屏幕截图: screenshot
更新 4:这是 XSLT 文件
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:asp="remove" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template name="home" match="/">
<table id="tbl1" runat="server">
<xsl:for-each select="ProgramKPI/KPIs">
<xsl:variable name="varKPI" select="KPI_ID"/>
<xsl:choose>
<xsl:when test="Level = '1'">
<tr>
<td>
<xsl:value-of select="Attribute"/>
</td>
</tr>
</xsl:when>
<xsl:when test="Level = '2'">
<tr>
<td>
<xsl:value-of select="Attribute"/>
</td>
</tr>
</xsl:when>
<xsl:when test="Level = '3'">
<tr>
<td>
<xsl:value-of select="Attribute"/>
</td>
<xsl:variable name="ddl_name" select="concat('ddl_', KPI_ID)"/>
<td>
<xsl:element name="select">
<xsl:attribute name="id"><xsl:value-of select="concat('ddl_', KPI_ID)"/></xsl:attribute>
<xsl:attribute name="runat">server</xsl:attribute>
<xsl:attribute name="AutoPostBack">true</xsl:attribute>
<xsl:attribute name="onchange">getvalue(this);</xsl:attribute>
<xsl:element name="option">
<xsl:attribute name="value"><xsl:value-of select="0"/></xsl:attribute>
<xsl:value-of select="'Select'"/>
</xsl:element>
<xsl:for-each select="//Parent_KPI[.=$varKPI]">
<xsl:element name="option">
<xsl:attribute name="value"><xsl:value-of select="preceding-sibling::AttributeCode"/></xsl:attribute>
<xsl:value-of select="preceding-sibling::Attribute"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
<!--<asp:DropDownList id="{concat('ddl_', KPI_ID)}" runat="server">
<asp:ListItem value="0"> Select
</asp:ListItem>
<xsl:for-each select="//Parent_KPI[.=$varKPI]">
<asp:ListItem>
<xsl:attribute name="value">
<xsl:value-of select="preceding-sibling::AttributeCode"/>
</xsl:attribute>
<xsl:value-of select="preceding-sibling::Attribute"/>
</asp:ListItem>
</xsl:for-each>
</asp:DropDownList>-->
</td>
</tr>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
【问题讨论】:
-
不是关于 XSLT(您可以通过任何其他方式生成该列表),而是动态生成的控件。重新标记。
-
如果您认为需要一张图片来解释自己,您可以使用免费的图片托管服务之一(如imgur)上传图片,并在您的问题中添加指向它的链接.
-
您不需要删除
<>。只需选择 XML 块并按{}图标或 Control-K。