Remember that the XSLT code is generating an HTML page. It can't react to things the user does because it has finished executing long before the user sees the page. You can generate script in the HTML page that responds to user events, but the XSLT code itself can't respond to user input.
I think your code would be so much more readable if you used literal result elements in place of xsl:element and xsl:attribute:
<asp:dropdownlist id="{$Name}" runat="server">
<xsl:copy-of select="@*"/>
<xsl:for-each select="$Value/Options/Option">
<asp:ListItem Value="{.}">
<xsl:if test="@selected='true'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
etc
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference