2013-06-02 95 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"]); 
      } 
     } 
    } 

你有沒有試圖證明它是正確的路線..... ????