@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

CompareValidatorがサーバーにアップロードすると正しく動作しない

1
投稿者投稿内容
Furi2
ベテラン
会議室デビュー日: 2004/10/28
投稿数: 74
お住まい・勤務地: N.Hollywood/Agoura Hills
投稿日時: 2006-04-29 03:31
CompareValidatorコントロールを使用して日付の入力チェックを行いたいのですが、localhostで走らせると正しくValidationSummaryにエラーメッセージを表示してくれるのに、サーバーにアップロードするとチェックされないらしく、入力されたままの値をSqlCommandのパラメタに渡そうとして例外が投げられ、"String was not recognized as a valid DateTime."というアプリケーション・エラーが返ってきてしまいます。

CompareValidatorはクライアント側のチェックだと思っていたのすが、同じブラウザを使っているのになぜ動作が違うのでしょうか?どこをチェックすればよいか教えていただけたら幸いです。

サーバー側もローカル側もIIS6.0を使用し、ASPとFrameworkのバージョンも1.14322で同じです。サーバーはWindows2003 Standerd Ed.、localhost側はXP Pro.です。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-29 08:23
引用:

Furi2さんの書き込み (2006-04-29 03:31) より:

入力されたままの値をSqlCommandのパラメタに渡そうとして例外が投げられ、"String was not recognized as a valid DateTime."というアプリケーション・エラーが返ってきてしまいます。


ただの FormatException のような気がしますね。
この説明のタイミングからして CompareValidator は関係あるのでしょうか?

引用:

CompareValidatorはクライアント側のチェックだと思っていたのすが、同じブラウザを使っているのになぜ動作が違うのでしょうか?


たとえば、スクリプトが切られていれば挙動は変わりますが...

引用:

どこをチェックすればよいか教えていただけたら幸いです。


とりあえず、起きている行くらいは掴んでおかないとデバッグは困難を極めます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-04-29 08:39
引用:

Furi2さんの書き込み (2006-04-29 03:31) より:

CompareValidatorはクライアント側のチェックだと思っていたのすが、同じブラウザを使っているのになぜ動作が違うのでしょうか?どこをチェックすればよいか教えていただけたら幸いです。


 クライアントチェックをアテにするな、ということです。必ずサーバでチェックしなければなりません (must)。


 それはそれとして。

 DateTime.Parse を使っているのなら、そのマシンのロケール設定によって、パースできる文字列が変わると言うことも、念頭に置いておかなければならないでしょう。
 つまり、サーバのロケールが U.S になっていれば、dd/MM/yyyy でなければならない、とかかもしれません。
Furi2
ベテラン
会議室デビュー日: 2004/10/28
投稿数: 74
お住まい・勤務地: N.Hollywood/Agoura Hills
投稿日時: 2006-04-29 14:45
ご返信どうもありがとうございます!

引用:

ただの FormatException のような気がしますね。
この説明のタイミングからして CompareValidator は関係あるのでしょうか?



localhostを使っての実行ですと、サーバー側に処理を回す前に(Post前に)クライアント側でエラーになるんです。
localhostを使うと、例えば日付入力Boxに"xyz"と入力するとCompareValidatorのおかげで、Errorですよ、とValidationSummaryに表示できるのです。が、これをアップロードしてリモートサーバーを使用しての実行ですと、"xyz"と入力してもCompareValidatorが動作してくれず、そのままサーバーに処理が戻り、Databaseに値を送ろうとしたため、そのような例外が出ています。


引用:

たとえば、スクリプトが切られていれば挙動は変わりますが...




恥ずかしながら、経験が浅いもので今一用語がわかりません。。スクリプトを「切る」とは、どういったことでしょうか?


引用:


 クライアントチェックをアテにするな、ということです。必ずサーバでチェックしなければなりません (must)。



はい!ありがとうございます、肝に銘じております。しかし、今一この動作の違いが理解できず、理由を知りたくて投稿させていただきました。

引用:


 DateTime.Parse を使っているのなら、そのマシンのロケール設定によって、パースできる文字列が変わると言うことも、念頭に置いておかなければならないでしょう。
 つまり、サーバのロケールが U.S になっていれば、dd/MM/yyyy でなければならない、とかかもしれません。




これってすっごく怪しいです!私のXPは英語版ですが、言語とリージョン設定は日本語です。対してサーバーは完全に英語、USの設定です。
でもそうであったとしても、日付のバリデーションで"xyz"をチェックしてくれずにスルーというのは、納得がいかないのではないでしょうか??
1

スキルアップ/キャリアアップ(JOB@IT)