asp.net使用URL路由时用户控件的多个Page_Load事件

我最近建立了一个ASP.net网站(不使用MVC.net)来使用URL路由(更多关于下面的代码) – 当在网站上使用用户控件时(即我创建了一个“菜单”用户控件到保持菜单信息)当URL有多个传递的变量时,该控件的page_load事件将触发两次。

pageName / VAR1:只会触发一次page_load事件。

pageName / VAR1 / VAR2:将触发page_load事件两次。

*最后添加多个额外的VAR仍然只会触发page_load事件两次*。


下面是文件中的代码snippits,第一个是MapPageRoute,位于Global.asax中:

// 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 } ); 

接下来是我在菜单项中指向页面的方式,这是UL标记中的列表项:

 
  • <a href="https://stackoverflow.com/questions/4614940/asp-net-multiple-page-load-events-for-a-user-control-when-using-url-routing/">Example 2
  • 最后在页面加载上多次命中的控件:

     // 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事件中放置一个断点来测试加载序列 – 它只在添加额外路由时才会命中两次。

    EDIT2:再次感谢那些迄今为止帮助过的人 – 我仍然无法找到双重负载的原因 – 其他人是否还有其他建议?

    编辑3 /答案:下面的答案解释了如何解决问题 – 基本上从初始网站创建/包括删除任何../引用Javascript文件。 我希望这可以帮助其他有这个问题的人!

    提前致谢,

    保罗赫特森

    尝试了很多事情之后我发现如果任何文件之前有一个../(在任何页面上的include中),它将导致上面描述的URL路由问题。

    只需确保没有使用../引用文件完全解决问题 – 特别是导致问题的Javascript文件。

    我已经绕过这个问题到了几乎尖叫的地步。 在对所有代码进行评论后,我将问题解决为iFrame,其中src属性设置为默认值“#”

    我希望这可以帮助别人。

    从您的问题中不清楚您是否在页面上有多个此用户控件实例。 如果是这样,我相信 (尽管有人可能会纠正我)控件的page_load事件将针对每个副本触发。

    进一步研究这个问题的一种方法是在控件的on_load事件中放置一个断点,并在每次停止时检查调用堆栈。 它不会给你一个确定的原因,但是,通过检查实例名称和ID等,你可以收集更多的信息。

    它可能是你试图将一些querystrinvalue传递给用户控件。你可以尝试正常传递它们,如下所示。

    Test.aspx文件?VAR1 =样品VAR2 =测试

    我不知道为什么,但如果你使用visual来创建asp项目将有这个代码

         

    如果删除该行

      

    事件Page_load只会加载一次。 :D它对我有用

    只需确保没有使用../引用文件完全解决了问题 – 特别是导致问题的图像文件。 ex.- ../Image/xyz.png

    当我删除../然后页面只加载一次