2014-09-20 82 views
0

我有一個使用代碼隱藏方法執行內容的按鈕。完成後,我有一個Redirect.Response應該轉發用戶並使用路由數據字符串來獲取與其匹配的所有產品。在Redirect.Response上添加的路由字符串,但未分配給[RouteData]字符串

相反,它會正確地將用戶轉發到目標URL([domain]/ScreeningDateTime/a38eceeb-5753-4156-ae2d-6a74cf7fef1e-64722426),但會顯示該表的所有結果,而不僅僅是匹配RouteData的結果串。

我想注意幾件事: 我可以輸入[domain]/ScreeningDateTime?id = 1並使其正常工作。 在調試(VS2013.3Pro)中,如果我插入InternalId,它會在初始頁面正確顯示字符串「a38eceeb-5753-4156-ae2d-6a74cf7fef1e-64722426」。在ScreeningDateTime頁面上,它沒有。

代碼一些東西爲簡潔,刪除(我已經測試過它,因爲它顯示具有相同的結果):

從最初的頁面

Response.Redirect(
      GetRouteUrl("ScreeningsByDateTimeRoute", new { internalId = InternalId })); 

從在Global.asax

void RegisterCustomRoutes(RouteCollection routes) 
    { 
     routes.MapPageRoute(
     "ScreeningsByDateTimeRoute", 
     "ScreeningDateTime/{internalId}", 
     "~/ScreeningDateTime.aspx" 
     ); 

     *More Routes* 

從ScreeningDateTime代碼後面(目的地頁面):

public IQueryable<Screening> GetProducts(
     [QueryString("id")] int? id, 
     [RouteData] string internalId) 
    { 
     var _db = new ProductContext(); 
     IQueryable<Screening> query = _db.Screenings; 

     if (id.HasValue && id>0) 
     { 
      query = query.Where(p => p.ScreeningID == id); 
     } 

     if (!String.IsNullOrEmpty(internalId)) 
     { 
      query = query.Where(p =>String.Compare(p.InternalId,internalId) == 0); 
     } 
     return query; 
    } 

如果找了一個修補程序的時間比我想承認的要長。任何幫助將不勝感激。 :)

感謝

回答

0

我一直訪問路徑變量.aspx.csPage.RouteData.Values[variableName]。試試這個代碼:

public IQueryable<Screening> GetProducts() 
{ 
    var _db = new ProductContext(); 
    IQueryable<Screening> query = _db.Screenings; 

    if (!String.IsNullOrEmpty(Request.QueryString["id"])) 
    { 
     query = query.Where(p => p.ScreeningID == Request.QueryString["id"]); 
    } 
    else if (Page.RouteData.Values["internalId"] != null && !String.IsNullOrEmpty(Page.RouteData.Values["internalId"] as string)) 
    { 
     query = query.Where(p => p.InternalId == Page.RouteData.Values["internalId"].ToString()); 
    } 
    return query; 
} 

UPDATE:

,我想知道,如果你正在使用類似FriendlyURLs或URL重寫,是造成/ScreeningDateTime.aspx/ScreeningDateTime/之間的衝突。嘗試將路由網址重命名爲其他內容,例如:

routes.MapPageRoute(
     "ScreeningsByDateTimeRoute", 
     "ScreeningDateTimeIntId/{internalId}", 
     "~/ScreeningDateTime.aspx" 
     ); 
+0

感謝您的回覆。嘗試沒有成功。 InternalId值仍顯示爲空。它似乎是我的路由問題,但我不確定。它被路由到正確的URL,但一旦該頁面沒有將「ScreeningDateTime/{InternalId}」的「{InternalId}」部分分配給路由數據。就像在那裏它只是被重置爲空。 – ZombieBunnies 2014-09-21 07:35:55

+0

如果該函數位於不同的類/庫中,是否可以嘗試將該函數移入頁面本身並查看它是否有效? – MikeSmithDev 2014-09-21 13:01:13

+0

@ ZombieBunnies添加了關於潛在路線/地址衝突的更新。 – MikeSmithDev 2014-09-21 19:00:00