1

そのため、ファイル メニューから Web サイトを構築しようとすると、タイトルに記載されているエラーが発生します。これを引き起こすコードは次のとおりです (body タグに表示される JavaScript):

            if(editedRow != null)
            {
                var SundayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_SunLocale.ClientID %>");
                var MondayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_MonLocale.ClientID %>");
                var TuesdayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_TuesLocale.ClientID %>");
                var WednesdayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_WedLocale.ClientID %>");
                var ThursdayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_ThursLocale.ClientID %>");
                var FridayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_FriLocale.ClientID %>");
                var SaturdayLoc = $find("<%= FieldOpsScheduler_ctl00_ctl05_RCB_SatLocale.ClientID %>");

                if(currentCombo == "OFF" || currentCombo == "OFFICE")
                {                
                    if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_SunActivity")
                    {
                        SundayLoc.disable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_MonActivity")
                    {
                        MondayLoc.disable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_TuesActivity")
                    {
                        TuesdayLoc.disable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_WedActivity")
                    {
                        WednesdayLoc.disable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_ThursActivity")
                    {
                        ThursdayLoc.disable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_FriActivity")
                    {
                        FridayLoc.disable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_SatActivity")
                    {
                        SaturdayLoc.disable();
                    }

                    sender.hideDropDown();
                }
                else if(currentCombo != "OFF" && currentCombo != "OFFICE")
                {
                    if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_SunActivity")
                    {
                        SundayLoc.enable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_MonActivity")
                    {
                        MondayLoc.enable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_TuesActivity")
                    {
                        TuesdayLoc.enable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_WedActivity")
                    {
                        WednesdayLoc.enable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_ThursActivity")
                    {
                        ThursdayLoc.enable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_FriActivity")
                    {
                        FridayLoc.enable();
                    }
                    else if(rcbID == "FieldOpsScheduler_ctl00_ctl05_RCB_SatActivity")
                    {
                        SaturdayLoc.enable();
                    }

                    sender.hideDropDown();
                } 
            }

ここで本当に奇妙なこと (そしておそらくこれが発生する根本的な原因です) は、上記のコードを削除すると、これらの Web フォーム要素 ID 名を指摘するエラーのちょうど半分がなくなることです。ただし、Web フォーム要素の ID を要求する JavaScript コードのすべての部分を削除したため、すべてではなく半分だけです。

関連するすべての JavaScript を削除し、VS2005 の残りの 7 つのエラー メッセージをダブルクリックすると、ページの最初のコード行に移動します。これは次のとおりです。

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="DistrictSchedule.aspx.vb" Inherits="FieldOperations_DistrictSchedule" %>

私自身も同僚も、デュースが起こっていることを知っています。エラーの半分を取り除くと、少なくともページは実行されます。ただし、コードから判断すると、すべてが機能する必要があります..

追加のエラー情報: 見つけようとしている Web フォーム要素 ID は、RadGrid が編集モードの場合にのみ存在することに注意してください。いずれにせよ、これはサイトを壊すようなエラーを引き起こすべきではありませんが、何らかの理由でそうです. 最後に、エラーをスローする特定の行は $find を使用する行であり、$find がエラーをスローするための値を取得する変数を使用する行でもあります。

何が起こっているのかを教えてくれる人は誰でも、大きな助けになるでしょう。よろしくお願いします。

4

2 に答える 2

1

あなた自身の解決策を見つけてよかったです。さらに明確にするために、ここで何が起こっているのかを示します。

<%= %>

上記は の省略形ですResponse.Write。したがって、次のコード行を使用すると:

var whatever = $find("<%= SomeControlIDDeclaredServerSide.ClientID %>");

サーバー側コントロールの ClientID を取得し、ページの処理時にその ID を JavaScript に出力するように ASPX ページに指示しているため、レンダリングされたページは次のようになります。

var whatever = $find("ctl00_ctl05_SomeControlIDDeclaredServerSide");

これは、ASP.NET で JavaScript プログラミングを実行してサーバー側コントロールのクライアント側 HTML ID を取得するときによく使用されます。これは、ASP.NET が実行時に HTML ID を動的に調整できるためです。このコードにより、ASP.NET コンテナーの名前付けの調整に関係なく、JavaScript で常に正しい ID が得られます。

クライアント ID静的 (設計時に設定したものがページにレンダリングされるもの) の場合、ClientID ルックアップは必要なく、代わりに次のように記述できます。

var whatever = $find("SomeControlIDAsDisplayedOnWebpage");

"SomeControlID..." は、対象とするコントロールの実際の HTML ID です。JavaScript$findメソッドはその HTML ID を直接検索し、HTML オブジェクトへの参照を取得します。

それが「なぜ」に役立つことを願っています。

于 2010-07-20T20:19:49.727 に答える
1

find()それで、テレリックに関する情報を探して他のページをランダムにブラウジングしたときに、これを修正するための明るいアイデアを得ました. 場合によっては、次のようなものがあることに気付きました。

var whatever = $find("<%= SomeControlIDDeclaredServerSide.ClientID %>");

また、他の場合には、次のようなものがあります。

var whatever = $find("SomeControlIDAsDisplayedOnWebpage");

これら 2 つの非常によく似たコード行は交換可能ではありませんが、一見すると互換性があると思われるかもしれません。具体的には、私の場合、これらのまったく迷惑なエラーをすべて取り除いたのは、括弧とパーセント記号を使用せずに 2 行目を使用することでした。

私の場合、1 行目ではなく 2 行目が機能する理由についての私の理論は、Web サイトのコンパイル/ビルドを選択するときに、1 行目のようなコードを使用すると、コンパイラは、.aspx ページのマークアップ構文を介してオブジェクトがすぐに作成されることを期待するということです。実行時に。私の場合、「FieldOpsScheduler_blahblahblah」は、RadGrid が編集モードになったときに動的に作成されていました (そのため、実行時にすぐではありません)。

とにかく、私の経験が、この問題または同様の問題に遭遇した人に役立つことを願っています.

于 2010-07-16T13:55:32.693 に答える