概要:
無効化された ASP.NET バリデーターは、サーバーにポストバックされるとコンテンツを失い、InnerHTML
(JavaScript を介してローカルで) 有効化されると、起動時にErrorMessage
オリジナルではなく表示されますInnerHTML
。
詳細:
他のコントロールの選択に応じて、多くの個々のコントロールを表示/非表示にし、それらのバリデーターを有効/無効にする必要がある複雑なフォームを扱います。
すべてのバリデーターには、単一の「アスタリスク」画像が含まれており、中央のasp:ValidatorSummary
オブジェクトを介してエラー メッセージが表示されます。たとえば(ここで表示するためにフォーマットされています。通常、空白の UPDATEはありません。これは実際には正しくありません。以下の更新を参照してください)...
<asp:RequiredFieldValidator runat="server" ID="valName"
ControlToValidate="txtName" ErrorMessage="Enter a name">
<img runat="server" src="~/images/error.gif" />
</asp:RequiredFieldValidator>
asp:CustomValidator
すべてのバリデーター (それぞれにローカル JavaScript とサーバー側ハンドラーが必要) で使用するのではなく、.enabled = false
通常のバリデーターを「親」コントロールのイベント ハンドラーの一部として設定するだけです。(コントロールのステータスは、最初のページの読み込み時とその後のポストバック ページの読み込み時にサーバー側でも設定されます。)
function showName(show){
document.getElementById("txtName").style.display = (show ? "" : "none");
document.getElementById("valName").enabled = show;
}
問題は、バリデータが無効になり、フォームがポストバックされ、(ユーザーの操作によって) コントロールが変更され、バリデータが有効になる一連のイベントにあります。バリデーターが (ポストバックの試みで) 失敗した場合、<img
コードはなくなっているため、代わりにErrorMessage
画像があるべき場所にテキストを表示します。
InnerHTML
バリデータが有効である限り、 は残ります。
ページの読み込みごとに各バリデーターに画像を動的に追加する (これは本当にやりたくない) か、すべてをCustomValidator
s に変換する (これも本当にやりたくない) 以外に、誰も方法を知っていますか?このあたり?これは既知のバグですか (明らかなバグが見つからないため)?
私は Visual Studio 2010 で ASP.NET 2.0 を使用しています。残念ながら、現時点では ASP.NET の上位バージョンにアップグレードする立場にありません。
更新
私が発見したのは、<img
タグの前に実際に
エンティティがあることです...そしてそれを削除すると、<img
バリデータ内にタグだけを残して動作します。
たくさん遊んだ後InnerHTML
、バリデーターにプレーンテキストのみが含まれている場合 (つまり、ASP サーバー側のコントロールがない場合) InnerHTML
、バリデーターが有効になっているかどうかに関係なく、ポストバック全体で保持されます。
ただし、プレーン テキスト (空白以外) でInnerHTML
始まり、サーバー側のコントロールもある場合、バリデーターが無効になっていると、ポストバック間で正しく保持されません。
なぜこれが当てはまるのかわかりませんが、小さなフォーマットの問題については確かに対処できます...それか
、リテラルまたはタグ内に配置する必要style
が<img
あります...さまざまなオプションがたくさんありますその上で。
ASP.NET 4.0 テスト ベッド アプリケーションを使用して、そのバージョンで同じことが起こることを確認できます。
今後数日で追加したいものが他にない場合は、上記の質問に自分で「答え」ます。