aspxレンダリングエンジンを使用して非HTMLを生成する
-
03-07-2019 - |
質問
aspテンプレートエンジン(部分的なコードビハインドクラス、動的<!> lt;%...%<!> gt;ブロックなど)を使用して非HTMLを生成することはできますか?コードを動的に生成する、クリーンで保守可能な方法が必要です。 (具体的には、データベースから値が入力されたLaTeXコードを生成したい。)
現在、私のLaTeXテンプレートは、データベース値でstring.replaceするプレースホルダーを持つリソース文字列です。このソリューションは、メンテナンスとクリーニングが非常に困難になりました。私は本当にaspxマークアップの動的ブロックを使用したいのですが、a)出力がHTMLでないときにaspxがフィットをスローするかどうか、またはb)実際に結果を.texファイルにレンダリングする方法はわかりません。
生成コード自体はC#.dllにあります。 .NET 3.5を使用しています
これは可能ですか?前もって感謝します。
解決
Visual Studio 2008ネイティブまたはVisual Studio 2005 SDKに付属するT4テンプレートを使用すると、必要なものをほとんど生成できます。
次のリンクで詳細情報を入手できます。
- Scott Hanselmanのブログ
- ロブコネリーのブログ
- Oleg SychのブログはT4の例の完全なリポジトリです
- ヨハンダンフォースのブログ
これらのリンクはすべて、あなたの探求の良い出発点であると確信しています。
Visual Studioの外部でT4テンプレートを生成する場合、T4テンプレートを呼び出すカスタムMSBuildタスクがあります(リンク)
<!> quot; Execute <!> quot;のサンプルです。 MSBuildタスクのコード。 ソースコードについてはここをクリック:
public override bool Execute()
{
bool success = false;
//read in the template:
string template = File.ReadAllText(this.TemplatePath);
//replace tags with property and item group values:
ProjectHelper helper = new ProjectHelper(this);
template = helper.ResolveProjectItems(template);
//copy the template to a temp file:
this._tempFilePath = Path.GetTempFileName();
File.WriteAllText(this._tempFilePath, template);
//shell out to the exe:
ProcessHelper.Run(this, TextTransform.ToolPath, TextTransform.ExeName, string.Format(TextTransform.ArgumentFormat, this.OutputPath, this._tempFilePath));
success = true;
return success;
}
他のヒント
なぜそうなのかわかりません。以前の仕事で知っていた人が、ASP.NETページとリピーターコントロールを使用してプロパティを挿入するデータベースラッパージェネレーターを作成しました。次に、ドキュメントの内容をソースファイルに書き出しました。
ASP.NETがフィットすることを心配している場合は、非常に限られたテストケースを作成して、自分で確認することができます。理論をテストし、それがあなたのニーズを満たしているかどうかを知らせるのに多くの時間を費やすべきではありません。
それは確かに可能です。ほとんどのサーバーコントロールは、HTMLマークアップを自動的に発行するため、アウトになります。ただし、ページをデータバインドし、データバインディング式を使用できます。 Visual Studioは、無効なマークアップについて文句を言うでしょう。
その後、出力を取得するには、CassiniまたはASP.NETパイプラインを介してページを実行する必要があります。それを行うユニットテストハーネスをどこかに持っていますが、驚くほど簡単です。
ただし、better のアイデアは、おそらくコードジェネレーターを使用することです。 CodeSmithのようなものはうまく動作するはずです。または、Visual Studioに組み込まれている T4 を使用すると、HTMLに結び付けようとすることなく、柔軟性が大幅に向上します。
コード生成については、T4テンプレート機能をご覧ください。 ASP.Netに似た構文を使用します。
Scott Hanselmans Postを参照してください。 http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx
はい、できます。標準の.aspxページを作成し、すべてのHTMLを削除して、ページに任意のコンテンツを配置するだけです。次に、<!> lt;%%<!> gt;を使用できます。ページ内に動的コンテンツを配置するタグ。また、ジェイソンZが言ったように、Repeaterコントロールを使用して、アイテムのコレクションを反復処理し、<!> quot; page <!> quot;にリストできます。また、HTMLを生成するため、他のすべてのサーバーコントロールを使用することはできませんが、必要に応じて独自のサーバーコントロールやユーザーコントロールを作成できます。