読者です 読者をやめる 読者になる 読者になる

きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

今日ちょっとハマった、.Netの小ネタ。

TECH

今日、少しハマってしまった小ネタ。

全角のダブルクォート(”)にまつわるエトセトラ。

Microsoft.VisualBasic.StrConvのWideの挙動が嫌な感じ。

ゆえあって、ダブルクォート『"』(U+0022)をいわゆる全角変換する必要があって、Microsoft.VisualBasic.StrConvでWideで変換してみたら、期待してた『”』(U+201D)でなくて、『■*1』(U+FF02)が出てきた。

いやまあ、Unicodeの並び的にはこれなんかもしれないけど、日本人的にはちょっと違うんでないかな、と思いたくなった僕はあながち間違ったことは言ってないと思う。

VB.NETって、全角”も特別扱いしやがるのか!!

そこで、StrConvで美味く処理するのは諦めてReplaceで「"」を「”」にするべく、『Hoge.Replace("""","”")』って書いたら!
シンタックス上”が"と同じとみなされて、Syntax Errorに!!

しょうがないので、『Hoge.Replace("""", ChrW(&H201D))』って書いてしまうことにしました。
ああ、また一見謎なコードが増えちゃったよ……。
#とりあえずこのままチェックインしたけど、やっぱり後から見て???になりそうな気もするから、共通関数気味にどこかに切り出しておくなりしてマジックナンバーは隠蔽しておいた方が良いかなぁ……。

DefaultButtonとValidationSummaryの良くない関係。

DefaultButtonを設定してEnterキーでPostbackしようと、ValidationSummaryが動作しない。

表題の通り。環境はVS2005、.Net Framework 2.0。

とあるButtonのClickイベントでValidationが発生した場合に、ValidationSummaryを表示するようにしておいたとします。
(ShowMessageBoxかそのままShowSummaryかは問いません。)
さらに、そいのButtonをとあるPanelコントロールのDefaultButtonに設定している、とします。


ここで、普通にマウスでボタンをクリックしたり、ボタンにフォーカスがあるときにキーボードでボタンを押下してやった場合には、Validationに引っかかるとちゃんとValidationSumamryが予定通りに動作。


ところが、panel内のテキストボックスなどでenterキーを押し、DefaultButtonとしての動作でPostBackを発生させると……。


ValidationSummaryが仕事をしません!(ToT)

Validator自体は動作してて、ValidatorのTextプロパティに設定した値なんかはちゃんと画面に表示されるし、PostBackもブロックされるのですが。



うーん、イケテナイ。


まあ、DefaultButtonを使う場面的に、早々Validatorと組み合わせる事も無い気がしますが、どうにかならないモノか。


今回は、ValidatorのEnableClientScriptをオフってサーバ側でIsValidをチェックして、Validatorsを回しながら引っかかったValidatorのErrorMessageを回収して自力でSummaryっぽいAlertをクライアントサイドに戻すようにしましたが……。


どうにかならんものかなぁ……。


MSDNフォーラムを探してみて、該当のが無かったらとりあえず書き込みだけはしておこうかなぁ……。



あ、向こうのには
http://forums.asp.net/t/1100563.aspx
こんなんあったけど、根本の解決はしてないみたいですな……。

*1:確認画面に移動したら化けた。EUCにもこの文字あるんだけど、何で?データベースか裏の一時保存用Flashとかのどこかで変換するときにマッピングがおかしくなってる?