2011-01-06 27 views
1

URLルーティングを使用するために、最近ASP.netサイト(MVC.netを使用しない)を設定しました。 (つまり、メニュー情報を保持するための「メニュー」ユーザーコントロールを作成しました)URLに1つ以上の変数が渡されたときに、そのコントロールのpage_loadイベントが2回発生します。asp.net URLルーティングを使用する場合のユーザコントロールの複数のPage_Loadイベント

すなわち

ページ名/ VAR1は:一度だけPage_Loadイベントを発生させます。

ページ名/ VAR1/VAR2

しばらくは:二回Page_Loadイベントを発生させます。

*最後に追加された複数のVARは、page_loadイベントを2回だけ発生させます*。


以下のファイルからコードsnippitsは、最初は、Global.asaxの中に位置MapPageRoute、である、以下のとおりです。

// Register a route for the Example page, with the NodeID and also the Test123 variables allowed. 
// This demonstrates how to have several items linked with the page routes. 
    routes.MapPageRoute(
     "Multiple Data Example",     // Route name 
     "Example/{NodeID}/{test123}/{variable}",  // Route URL - note the NodeID bit 
     "~/Example.aspx",       // Web page to handle route 
     true,          // Check for physical access 
     new System.Web.Routing.RouteValueDictionary 
     { 
      { "NodeID", "1" },  // Default Node ID 
      { "test123", "1" },  // Default addtional variable value 
      { "variable", "hello"} // Default test variable value 
     } 
    ); 

次は、私は、メニュー内のページに向けてきた方法です。ページのロードに複数回にヒットを取得します

<li class="TopMenu_ListItem"><a href="<%= Page.GetRouteUrl("Multiple Data Example", new System.Web.Routing.RouteValueDictionary { { "NodeID", "4855" }, { "test123", "2" } }) %>">Example 2</a></li> 

そして最後にコントロール:

項目は、これは、ULタグ内のリスト項目です
// For use when the page loads. 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Handle the routing variables. 
     // this handles the route data value for NodeID - if the page was reached using URL Routing. 
     if (Page.RouteData.Values["NodeID"] != null) 
     { 
      nodeID = Page.RouteData.Values["NodeID"] as string; 
     }; 

     // this handles the route data value for Test123 - if the page was reached using URL Routing. 
     if (Page.RouteData.Values["Test123"] != null) 
     { 
      ExampleOutput2.Text = "I am the output of the third variable : " + Page.RouteData.Values["Test123"] as string; 
     }; 

     // this handles the route data value for variable - if the page was reached using URL Routing. 
     if (Page.RouteData.Values["variable"] != null) 
     { 
      ExampleOutput3.Text = "I say " + Page.RouteData.Values["variable"] as string; 
     }; 
    } 

ページに当たってアイテムのデフォルト値を使用しているとき、リロードは起こらないことに注意してください。


誰でも提供できるヘルプやガイダンスは非常に高く評価されます。

編集:ユーザーコントロールはページに一度だけ追加されます。私はpage_loadイベントにブレークポイントを置くことでロードシーケンスをテストしました。余分なルートが追加されたときに2回だけヒットします。

EDIT2:これまで手伝ってくれた人にはもう一度感謝しています - 私はまだ二重負荷の原因を突き止めるのに苦労しています - それ以上の提案はありませんか?

EDIT3 /回答:以下の回答は、初期のサイト作成/インクルードからJavascriptファイルへの参照/基本的な参照を削除する方法を説明しています。私はこれがこの問題を抱えている誰にでも役立つことを願っています!事前に

おかげで、

ポール・ハトソン

+0

私は考えているが、私は少数のより多くの時間のためにたむろすることをお勧めしたいです残りの北米は目を覚ます。数時間後に編集して、投稿をミックスに戻します。 – jcolebrand

+0

本当にありがとうございます!私が作った明白な間違いを見つけてもらうことを願っています。 –

答えて

3

が、私は任意のファイルは../それ以前に、それが原因となります(どのページに含めるに)を持っていれば、ということを発見した多くのことを試してみました上記のURLルーティングの問題。

../を使用してファイルが参照されていないことを確認するだけで、問題を完全に解決しました。具体的には、問題を引き起こしていたJavascriptファイルです。

+0

それも私の問題を解決! – FiveTools

0

は、それはあなたがページでこのユーザーコントロールの複数のインスタンスを持っているかどうか、あなたの質問から明らかではありません。もしそうなら、と信じていますが(誰かが私を訂正するかもしれませんが)、コントロールのpage_loadイベントは各コピーに対して起動されます。

この問題をさらに調査する方法は、コントロールのon_loadイベントにブレークポイントを設定し、停止するたびにコールスタックをチェックすることです。それはあなたに決定的な原因を与えませんが、インスタンス名& IDなどをチェックすることによって、より多くの情報を収集することができます。

+0

David、最初に、返事をくれてありがとう。 ...コントロールはページに一度しか追加されません。 page_loadイベントのブレークポイント:しかし、私はそれを停止する方法を見ることができません... –

+0

あなたが投稿したものを再度読んでいる私はあなたがon_loadイベント(またはむしろonload?今行っても、同じことが起こっています。呼び出しスタックは、私に膨大な量の情報を与えるようには見えません。ちょうどそれが、ページ上で呼び出される最初のものです。 –

0

おそらく、あなたはユーザーコントロールにいくつかのクエスチョン値を渡そうとしています。通常、以下のようにそれらを渡してみてください。

Test.aspxという?VAR1 =サンプル& var2の=テスト

+0

返信ありがとう - 私はexample.aspxで試してみましたか?Nodeid = 1&test123 = 100:page_loadを1回だけ実行します。 しかし、これは、使用したいURLルーティングを廃止したことを意味します(URLへの従来のルーティング方法に戻ります)。 –

0

私はなぜ知らないが、あなたは、ASPプロジェクトを作成するために、ビジュアルを使用する場合は、行にPage_Loadのが唯一の1時間をロードします

<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> 

イベントを削除する場合は、このコード

<asp:PlaceHolder ID="PlaceHolder1" runat="server"> 
    <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
    <script src="<%: ResolveUrl("~/Scripts/modernizr-2.6.2.js") %>"></script> 
</asp:PlaceHolder> 

を持つことになります。 :私のために働いてください

1

私はこの問題をほぼ叫んでいる点まで周りを回りました。すべてのコードをコメントアウトした後、iFrameのsrc属性にデフォルトの '#'を設定して問題を解決しました。

私はこれが誰かを助けることを望みます。

-1

../を使用してファイルが参照されていないことを確認するだけで、問題を完全に解決しました。具体的には、問題の原因となったイメージファイルです。私は削除している

../Image/xyz.png

ex.- ../そのページを一度だけロードされ

関連する問題