2012-02-27 3 views
2

私はXSLTを出力するキー/値ペアのテーブルを変換する必要があり:「オンザフライで」XSLT変換に由来するasp.netページを持つ方法はありますか?

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="keys"> 
    <table border="1"> 
     <xsl:apply-templates select="key" /> 
    </table> 
    </xsl:template> 
    <xsl:template match="key"> 
    <tr> 
     <td> 
     <xsl:value-of select="@name" /> 
     </td> 
     <td> 
     <pre> 
      <xsl:value-of select="." /> 
     </pre> 
     </td> 
    </tr> 
    </xsl:template> 
</xsl:stylesheet> 

私は現在<asp:Xml />サーバーコントロールとそれを使用しています。

asp.netページサイクルの動的な性質から、実際のサーバーサイドタグを生成し、オンザフライコード生成機能を得ることができると私は考えています。これは可能なことか良いアイデアですか?

だから、XSLTは含まれています:

... 
     <asp:Label runat="server"><xsl:value-of select="@name" /></asp:Label> 
    ... 

注:私の言い値の動機は何よりも学術的です。

答えて

0

いいえ;そこに2つのプラットフォームを混在させています。 の外部メソッドを使用した場合(xsltで独自の.NETメソッドを使用できるようにした場合)、おそらく動作させることができますが、それは非常に醜いと思います。 xsltを使用している場合は、MVCのように考えるべきでしょう。サーバー側のオブジェクトではなく、生の出力(html)を生成しています。

+1

OPはこれを行うのではないが、なぜ、彼/彼女はpreinitでコントロールを生成できないのですか?彼/彼女はpageloadイベントで処理される "マークアップ"を生成しています。 – Jordan

+0

@ヨルダンは、xsltは** asp.netコントロールを作成するためのものではありません。それは変形ツールです。私が言及したように、外部オブジェクトをxsltプロセッサに提供することができます:xsltはここで重要なことです。 –

+1

xsltこれは、XMLを他の形式に変換することを意図していました.... asp.netの制御はそれにうまく収まりました。それが変容を行う能力であれば、その領域内にあるように見えます。私はxsltが変換の特定のタイプの_intended_であるとは言いません。 – Jordan

3

これは間違いなく可能です。

これは、ページライフサイクルのPreInit PreInitステージで行う必要があります。私はあなたがPreLoadでそれを行うことができるかもしれないが、私は100%ではないとviewstateを使用していないと思う。
それは良い考えである限り、なぜそれをしたいのかによって異なります。

あなたがそれをやっているのであれば、それはおそらく悪い考えです:)あなたはアプリケーションを過度に複雑にしています。機能的なニーズを満たしていれば、それは素晴らしいアイデアと洗練されたソリューションです。 :)

追加:私はあなたのための例を持ってしばらく前に見たサイトです。 XSLT To generate .NET tags

+0

あなたはPreInitがASPXのマークアップが解析される前であると言っていますが、私はそこで変更できますか? –

+0

最初のリンクを読むと、コントロールが表示され、読み込まれるまで読み込まれません。しかし、私はあなたが2番目のリンクに従うことをお勧めします。これは、loadイベントを使用して必要なコントロールを作成します。私は別のコメントに記入することに1つの変更をお勧めします。 – Jordan

+0

2番目のリンクをたどると少し古いですが、XslTransformをXslCompiledTransformに変更します。さらに、同じxslシートを繰り返し使用している場合は、XslCompiledTransformの結果をキャッシュすることをお勧めします。 – Jordan

2

はい、独自の方法でXMLを定義し、これらのタグをXSLTを使用してサーバー側のコントロールに変換できます。ここでは、作成することができます。この方法は、基本的な例です...その後

<section type="Panel" id="dyna_panel_Riskfactors" GroupingText="Identified Risk factors:" Width="200px"> 
    <control type="CheckBoxList" id="dyna_chkl_Riskfactors" CssClass="" ToolTip="Identified Risk factors"> 
    <subcontrol Type="ListItem" Text="Tattooing" Value="Tattooing" Selected="False" /> 
    <subcontrol Type="ListItem" Text="IV drug user" Value="IV drug user" Selected="False" /> 
    <subcontrol Type="ListItem" Text="Dont Know" Value="Dont Know" Selected="False" /> 
    </control> 
</section> 

とは、ウェブページまたは次のコードを使用して、Webページの一部にXMLを変換する...

<!--For CheckBoxList--> 
    <xsl:if test="@type='CheckBoxList'"> 
    <asp:CheckBoxList id="{@id}" CssClass="{@CssClass}" runat="server" ToolTip="{@ToolTip}" Width="{@Width}"> 
     <xsl:for-each select="subcontrol"> 
     <asp:ListItem Value="{@Value}" Selected="{@Selected}"> 
      <xsl:value-of select="@Text" /> 
     </asp:ListItem> 
     </xsl:for-each> 
    </asp:CheckBoxList> 
    </xsl:if> 

サーバーコントロール...

+0

は、Razor構文またはasp.netマークアップのタイプですの? –

+2

@Gabrielは簡略なxslt構文です。 xslt(マッピング属性の場合)で頻繁に使用する必要があります。これは大量の時間を節約します。それはasp.netまたはかみそりとは無関係で、xsltにのみ関連しています。それで ''は ' =" @ id "/> ' –

+0

ありがとう、マーク= - それは知っているのは素晴らしいです。 –

関連する問題