2013-06-02 19 views
8

我创建了一个新的Web窗体(ASP.NET 4.5)项目,并试图让URL路由工作。Page.RouteData.Values [“parameter”] not working

RouteConfig.cs看起来是这样的:

routes.MapPageRoute("surveyhome", "survey/home", "~/Survey.aspx"); 
routes.MapPageRoute("surveyquestions", "survey/questions/{q}", "~/Survey.aspx"); 

我有一个链接,看起来像这样:

<a href="/survey/questions/1">1</a> 

它正确地加载Survey.aspx页面,所以我知道这部分的工作,但是这个代码(在该页的代码隐藏中)不起作用:

if (Page.RouteData.Values["q"] != null) 
{ 
    // do something 
} 

它是始终为空。为什么?

+0

'q'应该代表什么? – Brian

+0

问题编号 – user982119

+0

你在哪里设置它?您可能需要发布更多相关的代码。 – Brian

回答

1

我已经测试了您的代码,并且对ASP.NET 4.0没有任何问题。

尝试定义默认值,比如

routes.MapPageRoute("surveyquestions", 
    "survey/questions/{q}", "~/Survey.aspx", 
    false, 
    new RouteValueDictionary 
     { { "q", String.Empty } }); 

这是否解决问题了吗?

+0

不,仍然为空。为什么它适合你的身体而不是我的身体而受到挫败。 – user982119

+0

可能是你缺少一些配置,你有没有在Global.asax的App_Start中添加RegisterRoute方法? 同时检查你是否缺少web.config中的任何东西 –

0

确保在您的Web.config中注册到IIS的UrlRoutingHandler和UrlRoutingModule是4.0版本,而不是3.5版本。这是我能想到的唯一一个可以让路由工作,但是你的参数不能映射的东西。

-1

我有同样的问题,我得到这个加在web.config中的配置节以下解决:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

添加这个会引发编译错误。 –

0

首先检查它是否包含你的情况主要可以实现这一目标用这行代码

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Page.RouteData.Values.ContainsKey("q")) 
     { 
      if (Page.RouteData.Values["q"] != null) 
      { 
       Context.Response.Write(Page.RouteData.Values["q"]); 
      } 
     } 
    } 

你有没有试图证明它是正确的路线..... ????