3

私はこれにしばらく取り組んできましたが、答えを見つけることができないようです...今日、Googleは本当に役に立ちません!

私は、多くの検証を伴う多くのフォームを使用する C# Web サイトに取り組んでいます。手で入力しなければならない大きなフォーム (ただし、問題はありません)。

私が抱えている問題は、ValidationControls の Display プロパティを動的に設定したいということです。

回避策を見つけましたが、これが最善の解決策であるとは確信していません。

現在、バリデーターの表示タイプを次のように「動的」に設定する BaseValidatorControlAdapter があります。

public class BaseValidatorControlAdapter : ControlAdapter
{
    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
        System.Web.UI.WebControls.BaseValidator _control = (System.Web.UI.WebControls.BaseValidator)this.Control;
        _control.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
        base.Render(writer);
    }
}

これは、次のような App_Browser を追加することによってトリガーされます

<browsers>
    <browser refID="Default">
        <controlAdapters>
            <adapter controlType="System.Web.UI.WebControls.BaseValidator"
                     adapterType="BaseValidatorControlAdapter" />
        </controlAdapters>
    </browser>
</browsers>

あなたへの質問です。バリデータ コントロールの Display のデフォルト値を設定することは可能ですか。私の現在の解決策は、現在あるものを上書きするだけであり、それを変更する方法がないためです。そのため、表示オプションで何か他のものが必要であるという状況が発生した場合、それに対する解決策はありません。

これにはもっと良い解決策があるとほぼ確信しています。

どんなアドバイスでも大歓迎です!

2012 年 8 月 2 日の編集:

最終的に、デフォルトのasp.netコントロールをオーバーライドし、次のコンストラクターを追加するソリューションに落ち着きました

public controlname ()
  : base ()
{
    this.Display = "Dynamic";
}

これらすべてのコントロールを名前空間に追加したので、できるようになりました

<validator:RequiredField ID="RqrdFld_x" runat="server" Display="Static" />

基本的に、コントロール定義のデフォルト値をオーバーライドし、コンストラクターでデフォルト コントロールの表示値 Dynamic をオーバーライドします。

4

2 に答える 2

2

このリンクは、問題の解決に役立つはずです。

スキン ファイルを使用して、.NET サイト全体で Web コントロールの既定値を設定できます。

DefaultTheme というフォルダーを App_Theme フォルダーに追加し、Skin.skin というファイルを追加しました。内容は次のとおりです。

<asp:RequiredFieldValidator runat="server" Display="Dynamic" />
<asp:CompareValidator runat="server" Display="Dynamic" />
<asp:RegularExpressionValidator runat="server" Display="Dynamic" />

..Web サイト全体でさまざまなバリデーター (またはその他のコントロール) のデフォルト設定を使用できるようにします。

于 2012-09-14T11:55:52.373 に答える
2

あなたができることは、Page_Initイベントでそのようなコードを使用することです:

foreach(Control control in Page.Controls){
  if(control is System.Web.UI.WebControls.BaseValidator)
  {
     control.Display = "Static";
  }
}

すべてのコントロールが検出され、Displayそれに応じてプロパティが設定されます。

于 2012-07-28T21:32:27.497 に答える