3

少し問題が発生し、少し掘り下げましたが、決定的な答え/修正を思い付くのに苦労しています。

基本的に、私はいくつかのJavaScript(サードパーティによって作成されたもの)を持っています. コードは単一のページ (つまり、マスターなし) ではうまく機能しますが、マスター内のコンテンツ ページに効果を適用しようとすると、機能しません。

つまり、メインのスクリプト参照を含むマスター ページがあります。すべてのページでスクリプトが使用されますが、スクリプトに渡されるパラメーターはコンテンツ ページによって異なります。

マスター ページ スクリプト リファレンス

<script src="scripts.js" language="javascript" type="text/javascript" />

シングルページ

<script>
    MakePretty("elementID");
</script>

ご覧のとおり、各ページに参​​照が必要です (したがってマスターにある) が、「MakePretty」する実際の要素はコンテンツに応じて変化します。

コンテンツページ

現在、コンテンツ ページには要素がないため<head>、次のコードを使用してマスター ページ<head>要素に追加しています。

HtmlGenericControl ctl = new HtmlGenericControl("script");
ctl.Attributes.Add("language", "javascript");
ctl.InnerHtml = @"MakePretty(""elementID"")";
Master.Page.Header.Controls.Add(ctl);

さて、これはうまくいきません。ただし、のような単純なものに置き換えるとalert("HI!")、すべて正常に動作します。したがって、コードは正常に追加されています。実行内容によっては、常に実行されるとは限りません..

さて、掘り下げたところ、コンテンツページのLoadイベントがマスターページの前に発生することがわかりました。

これがばかげた質問である場合はご容赦ください。ただし、特にマスター ページのシナリオでは、JavaScript を使用するのはまだ比較的慣れていません。

マスター ページで参照されている JavaScript コードをコンテンツ ページで呼び出すにはどうすればよいですか?

この人たちのあらゆる/すべての助けに感謝します, あなたは本当にこの仕事の問題で私を助けてくれるでしょう.

ノート:

  • RegisterStartupScriptなどは、どのレベルでも機能しないようです..
  • コントロール ID は、MasterPage 環境でも適切に設定されており、期待どおりにレンダリングされています。

これのいずれかが不明確な場合はお詫びします。私は本当に疲れているので、必要に応じて、言い直し/説明が必要な場合はコメントしてください。

4

5 に答える 5

5

マスター ページのヘッド セクションに ContentPlaceHolder を配置し、プレースホルダーを参照してコンテンツ ページに asp:Content コントロールを追加し、スクリプトをそのコントロールに配置します。このようにページごとにカスタマイズできます。

また、マスター ページを使用すると、ページ上のコントロール ID がコンテナー構造に基づいて自動的に作成されるため、ID による参照が機能しない場合があります。ソースを表示するか、firebug を使用してフォーム要素を検査し、出力された ID を確認してください。

于 2008-10-06T21:10:34.470 に答える
2

きれいなjavascriptでできませんか?-)

-- body タグ内に次のようなものを追加するだけです。

<script type="text/javascript">
  window.onload = function(){
    MakePretty("elementID");
  }
</script>

ちなみに、スクリプトタグには終了タグが必要です:

<script type="text/javascript" src="myScript.js"></script>
于 2008-10-06T21:09:55.300 に答える
1

jQueryを使用してすべてのコントロールを見つけてみませんか?このようなもの:

$(document).ready(function(){
  $("input[type='text'], input[type='radio'], input[type='checkbox'], select, textarea").each(function(){
    MakePretty(this);
  });
});

このようにして、ページ上のすべての要素を取得し、ページの準備ができるまで待つことができます(したがって、DOMを不法に変更することはありません)。jQueryセレクターは、必要に応じて、特定の形式の要素をもう少し取得できます(つまり、body divのIDなどのルート要素を追加します)。

また、MakePrettyメソッドを変更して、処理のオーバーヘッドを削減するために、IDではなく要素をパラメーターとして使用することをお勧めします。

于 2008-10-06T22:02:28.000 に答える
0

マスター ページを使用すると、クライアント側のコントロールの ID は、あなたが思っているものではなくなります。スクリプトを生成するときは、Control.ClientID を使用する必要があります。

于 2008-10-06T21:12:26.230 に答える
0

マスター ページを使用する場合、.NET は ID を一意に保つ必要があるため、この値を変更するため、html 属性 ID に注意する必要があります。

JavaScript が ID を介して CSS スタイルを適用していると思います。マスター ページを使用している場合、ID は aspx のものとは異なります。JavaScript が常に追加されていることを確認する場合は、次の点を考慮して回答する必要があります。

  • ページ読み込み時に常にマスターページ ID を設定します (this.ID = "myPrefix";)
  • マスター ページ内のすべての HTML 要素には、マスター ページ ID がプレフィックスとして付けられます (つまり、レンダリングされたページでは "myPrefix_myDiv" になります)。
  • コンテンツ プレース ホルダー ID の HTML 要素には、プレフィックスが追加されます (つまり、myPrefix_ContentPlaceHolderId1_myDiv)。

何か明確にできることがあれば教えてください。お役に立てれば!

于 2008-10-06T22:26:40.323 に答える