- PR -

ASP20 クライアントスクリプトを埋め込むとValidatorが効かない?

1
投稿者投稿内容
rmmug
大ベテラン
会議室デビュー日: 2006/03/07
投稿数: 116
投稿日時: 2008-08-05 16:14
[Visula Studio 2005 SP1] ASP.Net2.0 (VB.Net)

Page_Loadで、以下のようにクライアントスクリプトを埋め込む
とRangeValidatorが機能せず(?)、Validatorのエラーであっても
ポストバックしてしまうのですが、わたしのコーディングに、
問題があるのでしょうか?


Dim sb As StringBuilder = New StringBuilder(String.Empty)

sb.Append("<script type='text/javascript'>")
sb.Append("function myCheck() {")
sb.Append("if document.form1.tbxInput.value=="""" ")
sb.Append(" { return confirm( '未入力ですが?') }")
sb.Append(" }")
sb.Append("</script>")
ClientScript.RegisterClientScriptBlock(Me.GetType(), "Check1", sb.ToString(), False)
btnExec.Attributes("OnClick") = "return myCheck()"
RapidExpress
常連さん
会議室デビュー日: 2007/11/11
投稿数: 42
お住まい・勤務地: おおさか
投稿日時: 2008-08-05 16:51
実際にその(スクリプトを埋め込んだ)ボタンが押されたとき何をしようとしているか、
吐かれたHTMLを見れば原因がわかると思います。
_________________
//---
 あやのこうじ@RapidExpress
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-08-05 18:54
スクリプトがエラーになっていると思います。
rmmug
大ベテラン
会議室デビュー日: 2006/03/07
投稿数: 116
投稿日時: 2008-08-06 12:56
RapidExpressさん、Jittaさん 有難うございます。
スクリプトのエラーには、なっていませんでしたが、
ソースの表示で、HTMLを確認してみました。
Validatorを使用すると、自動的にボタンのOnClickが
記述されるのですね。別に、javascriptを自分で書き
ボタンのOnClickを上書きしたため、Validatorが機能
しなくなってしまったようです。
両立する方法は、ないのかなと思いますが、
とりあえず、原因は、このせいだと思います。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-08-06 14:38
Javascript は、文の終端に ";" が必要ですから、お忘れなく。
# 実行されてないなら、エラーにならないね
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-08-06 14:48
Jittaさんと一部被りましたが、

コード:

Dim sb As StringBuilder = New StringBuilder(String.Empty)

sb.Append("<script type='text/javascript'>")
sb.Append("function myCheck() {")
sb.Append("if (document.form1.tbxInput.value=="""") ")
sb.Append(" { return confirm( '未入力ですが?'); }")
sb.Append(" }")
sb.Append("</script>")
ClientScript.RegisterClientScriptBlock(Me.GetType(), "Check1", sb.ToString(), False)
btnExec.Attributes("OnClick") = "return myCheck();"


↑で示したように括弧やセミコロンがないと、JavaScriptのエラーになるような。

あと3つ気がついた点。

1. 最後の行は、Button.OnClientClick プロパティで代用できるかなぁ
2. RegisterClientScriptBlock() の最後の引数を True にすれば、わざわざ scriptタグを書かなくてもいいかなぁ
2'.aspxファイルに直接 JavaScript を書いてもいいかも
3. "form1" や "tbxInput" と書いている部分は、Control.ClientID に置き換えたほうがいいかなぁ

※2'を追加
</font>

[ メッセージ編集済み 編集者: rain 編集日時 2008-08-07 09:50 ]
rmmug
大ベテラン
会議室デビュー日: 2006/03/07
投稿数: 116
投稿日時: 2008-08-08 10:46
Jittaさん、rainさん 有難うございます。

>Javascript は、文の終端に ";" が必要ですから、お忘れなく。
有難うございます(汗)

>1. 最後の行は、Button.OnClientClick プロパティで代用できるかなぁ
>2. RegisterClientScriptBlock() の最後の引数を True にすれば、わざわざ scriptタグを書かなくてもいいかなぁ
>2'.aspxファイルに直接 JavaScript を書いてもいいかも
>3. "form1" や "tbxInput" と書いている部分は、Control.ClientID に置き換えたほうがいいかなぁ

RegisterClientScriptBlock() の True, Falseをよく知らず使ってしまっていました。
勉強なりますっ!
1

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