たとえば、リテラルを継承するカスタムコントロールを作成します。このコントロールはヘルパーになります。
あなたはそれをページに挿入し、あなたのためにすべての汚い仕事をしてもらいます。たとえば、いくつかのロジックに基づいて、それが完了したら、出力コード[作成に多くの時間がかかります]。
その自動コードを取得し(実際に別のコントロールによって毎回実行されると非常に重要になります)、ヘルパーコントロールを削除し、新しいコードを必要な場所にハードコードして配置します。
このようにして、コンピュータに必要なコードを思い通りに理解させることですべての間違いを回避し、一般的な方法で問題を解決することによって苦しむハードコードされた速度をすべて得ることができます。
私はちょうど同じことを探していました、そしてそれは突然私を襲いました。私は他の目的でこのメソッドを使用します[すべてのコントロールをスキャンしていくつかの初期化コードを出力します]が、このメソッドを使用してこれを簡単に実行できると思います!
書いたばかりで、あなたと共有します
public class ValidationCodeProducerHelper : Literal
{
// you can set this in the aspx/ascx as a control property
public string MyValidationGroup { get; set; }
// get last minute controls
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
// start scanning from page subcontrols
ControlCollection _collection = Page.Controls;
Text = GetCode(_collection).Replace("\r\n", "<br/>");
}
private string GetCode(Control _control)
{
// building helper
StringBuilder _output = new StringBuilder();
// the logic of scanning
if (_control.GetType().GetProperty("ValidationGroup") != null && !string.IsNullOrEmpty(_control.ID))
{
// the desired code
_output.AppendFormat("{0}.{1} = {2};", _control.ID, "ValidationGroup", MyValidationGroup);
_output.AppendLine();
}
// recursive search within children
_output.Append(GetCode(_control.Controls));
// outputting
return _output.ToString();
}
private string GetCode(ControlCollection _collection)
{
// building helper
StringBuilder _output = new StringBuilder();
foreach (Control _control in _collection)
{
// get code for each child
_output.Append(GetCode(_control));
}
// outputting
return _output.ToString();
}
}