1

コンテンツページに、Javascriptを介してクライアント側の検証を行っているフォームがあります。JSコードをコンテンツページに直接配置すると、Javascriptは期待どおりに動作します。しかし、JSコードを独自のファイルに配置し、コンテンツ/マスターページから(スクリプトタグのsrc属性を介して)アクセスしようとすると、JSの検証関数が呼び出されたときに実行時エラーが発生します。

具体的には、以下のエラーが発生します。Microsoft JScriptランタイムエラー:この行でオブジェクトが予期/必須-document.getElementById('<%= txtemailId.ClientID%>')。value

txtemailIdはコンテンツページにあります。

Javascriptコードはvalidation.jsに配置され、マスターページからアクセスされます。

私が推測する理由は、.netがファイルを解析しているときに、txtemailId.ClientIDを後で生成されるクライアント側の値に置き換えることができないためです。それで、どのようにそれについて行かなければなりませんか?ありがとう!

4

4 に答える 4

1

その通りです。<%=txtemailId.ClientID %>このコードが ASP.Net ファイルにある場合、コードは ASP.Net によって実際のクライアント ID にのみ置き換えられます。したがって、この JavaScript を別の .js ファイルに入れると、ASP.Net はそれについて何も認識せず、コードは解析されません。

これを実現する最も簡単な方法は、関数のコントロール ID パラメーターを作成することです。このようにして、.aspx (または .ascx) ファイルに呼び出し元の JavaScript コードをコードと共に含めることができます<%=txtemailId.ClientID %>

于 2010-06-07T13:41:33.860 に答える
1

これに対する答えは非常に簡単です。

コンテンツ ページ内でインライン JScript 変数を宣言します。これがタグの上にあることを確認してください。

<script>
  var emailClientId = &lt;%=txtemailId.ClientID%&gt;;
</script>

include.js ファイル内で、グローバル スコープのemailClientId変数を使用します。

すべての JScript コードが include.js ファイル内に含まれているわけではないため、明らかにこれは少しぎこちなく、値が具体的にどこから来ているのか明確でないため、デバッグ/診断が困難になります。将来のコードベースのメンテナンスを容易にするために、コード内でこれを明確にコメント/ドキュメント化する必要があります。

于 2010-06-07T13:42:52.187 に答える
0

スタンドアロンの.jsファイルはASPXパーサーを介して実行されないため、式は評価されません。

この問題を解決するには、コントロールのIDを使用してASPXファイルにグローバル変数(または関数パラメーターなど)を設定し、それらをスタンドアロンの.jsファイルで使用します。

または、IDの代わりにクラス名(マングルされない)を使用することもできます。(これはjQueryを使用すると非常に簡単です)

于 2010-06-07T13:38:44.567 に答える
0

このようなアプローチは、達成したいものに最適です。

検証.js

var Validation = {
     EmailId: null,

     Validate: function() {
          var email = document.getElementById(EmailId).value;
     }
}

page.aspx

Validation.EmailId = '<%=txtemailId.ClientID %>'; //initialize
Validation.Validate(); //whenever you want to validate
于 2010-06-07T13:41:02.400 に答える