2014-09-20 7 views
0

코드 숨김 메소드를 사용하는 버튼이 있습니다. 마무리 후 사용자에게 전달하고 경로 데이터 문자열을 사용하여 일치하는 모든 제품을 가져와야하는 Redirect.Response가 있습니다.Redirect.Response하지만 [RouteData] 문자열에 할당되지 않은 경로 문자열 추가

대신 제대로 도착 URL을 사용자에게 전달한다 ([도메인]/ScreeningDateTime/a38eceeb-5753-4156-ae2d-6a74cf7fef1e-64722426), 그러나 단지 테이블의 모든 결과를 표시하는 대신에은으로 RouteData 매칭 결과 끈.

몇 가지 사항에 대해 알아 보았습니다. [domain]/ScreeningDateTime? id = 1을 입력하고 제대로 작동하도록 할 수 있습니다. Debug (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; 
    } 

필자가 인정하는 것보다 오랫동안 수정 프로그램을 찾은 경우. 어떤 도움이라도 대단히 감사하겠습니다. :) 난 항상 Page.RouteData.Values[variableName].aspx.cs에서 경로 변수를 액세스 한

답변

0

감사합니다. 이 코드를보십시오 :

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/ 사이에 충돌을 일으키는 것입니다. 경로 URL의 이름을 다음과 같이 다른 이름으로 변경하십시오.

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

감사합니다. 성공하지 않으려 고 노력했다. InternalId 값이 계속 null을 표시합니다. 내 경로 설정에 문제가있는 것 같지만 잘 모르겠습니다. 적절한 URL로 라우트되지만, 일단 페이지가 "ScreeningDateTime/{InternalId}"의 "{InternalId}"부분을 routedata에 지정하지 않습니다. 한번 거기처럼 그것은 단지 null로 리셋된다. – ZombieBunnies

+0

해당 함수가 다른 클래스/라이브러리에있는 경우 해당 함수를 페이지 자체로 이동하여 작동하는지 확인할 수 있습니까? – MikeSmithDev

+0

@ZombieBunnies가 잠재적 인 경로/URL 충돌에 대한 업데이트를 추가했습니다. – MikeSmithDev