asp.net使用URL路由时用户控件的多个Page_Load事件当在网站上使用用户控件时(即我创建了一个“菜单”用户控件来保存菜单信息),当URL传递了多个变量时,控件的page_load事件将触发两次。即pageName/VAR1:只会触发page_load事件一次。pageName/VAR1/VAR2:将触发page_load事件两次。*在末尾添加多个额外的VAR仍然只会触发page_load事件两次*。以下是文件中的代码片段,第一个是MapPageRoute,在Global.asax中://为示例页面注册一个路由,允许使用NodeID和Test123变量。//这演示了如何将多个项目与页面链接起来注意NodeID位"~/Example.aspx",//处理路由的网页true,//检查物理访问newSystem.Web.Routing.RouteValueDictionary{{"NodeID","1"},//默认节点ID{"test123","1"},//默认附加变量值{"variable","hello"}//默认测试变量值});接下来是我如何指向菜单项中的页面,这是UL标记中的列表项:Example2FinallyonpageloadControlsonmultiplehits://在页面加载时使用。protectedvoidPage_Load(objectsender,EventArgse){//处理路由变量能力。//这会处理NodeID的路由数据值-如果页面是使用URL路由到达的。if(Page.RouteData.Values["NodeID"]!=null){nodeID=Page.RouteData.Values["NodeID"]asstring;};//这会处理Test123的路由数据值-如果页面是使用URL路由到达的。if(Page.RouteData.Values["Test123"]!=null){ExampleOutput2.Text="我是第三个变量的输出:"+Page.RouteData.Values["Test123"]asstring;};//这会处理变量的路由数据值-如果页面是使用URL路由到达的。if(Page.RouteData.Values["variable"]!=null){ExampleOutput3.Text="Isay"+Page.RouteData.Values["variable"]asstring;};请注意,当我刚刚点击该页面并且它使用项目的默认值时,重新加载不会发生任何人可以提供的任何帮助或指导将不胜感激!编辑:用户控件只添加到页面一次。我通过在page_load事件中放置一个断点来测试加载顺序-添加额外路由时它只会命中两次。EDIT2:再次感谢那些到目前为止提供帮助的人——我仍然找不到双重加载的原因——还有其他人有其他建议吗?编辑3/答案:下面的答案解释了如何解决问题——基本上从初始网站创建/包含中删除任何../引用的Javascript文件。我希望这可以帮助其他人解决这个问题!在此先感谢PaulHutson在尝试了很多事情之后,我发现如果任何文件前面有一个../(在任何页面的包含中),它将导致上述URL路由问题。只需确保您没有使用../referenced文件来完全解决问题-特别是导致问题的Javascript文件。我已经绕过了这个问题,几乎尖叫起来。评论完所有代码后,我解决了src属性设置为默认值“#”的iFrame的问题,希望这对其他人有帮助。从您的问题中不清楚页面上是否有此用户控件的多个实例。如果是这样,我相信(尽管有人可能会纠正我)控件的page_load事件将为每个副本触发。进一步调查此问题的一种方法是在控件的on_load事件中放置一个断点,并在每次停止时检查调用堆栈。它不会给你一个明确的理由,但是,你可以通过检查实例名称和ID等来收集更多信息。这可能是你试图将一些查询字符串值传递给用户控件。您可以尝试正常传递它们,如下所示。测试.aspx文件?var1=samplevar2=test我不知道为什么但是如果你使用视觉创建asp项目将有此代码如果删除该行事件Page_load将只加载一次。:D它对我有用只要确保不使用../referenced文件就可以完全解决问题-特别是导致问题的图像文件。ex.-../Image/xyz.png当我删除../然后页面只加载一次它很有用,需要了解更多关于C#学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: