2010-12-16 6 views
1

보기에서 경로 값을 감지 할 수 있습니까?보기에서 경로 값 검색

/pages/create/1과 같이 1이 있는지 확인하고 싶습니다.

기본적으로이 값을 기반으로 다른 부분 뷰를 렌더링하고 싶지만 실제로 달성하려는 최선의 방법이 아닐 것이라고 확신합니다.

참고로 위의 작업을 수행하는 대신 내 컨트롤러의 값을 기반으로 뷰에서 렌더링 된 부분 뷰를 변경할 수 있습니까?

답변

1

당신은 ViewPage.ViewContext.RouteData를 통해 RouteData 개체를 검사 할 수 있습니다. 당신이 대신 컨트롤러에이 값을 검사 할 찾을 경우

string areaname = routeData.Values["area"] as string; 
string controllername = routeData.Values["controller"] as string; 
string actionname = routeData.Values["action"] as string; 
string id = routeData.Values["id"] as string; 

같은 것을 사용하여 값을 확인, 당신은 ControllerBase.ControllerContext.RouteData를 사용하여 액세스 할 수 있습니다. 비슷한 액션 필터 등

1

다른 답변이 정확 적용,하지만 난 당신의 마지막 문장 해결 거라고 생각 : 내가 할 것이 가능하다 대신 위의 일을, 보조 노트에

을 내 컨트롤러의 값을 기반으로 뷰에서 렌더링 된 부분 뷰를 변경할 수 있습니까?

뷰의 뷰 자체 렌더링 음 부분 다음 코드 (자바 스크립트에서 호출하고 DOM에 직접 결합하지 않는 한) :

<%: Html.RenderPartial("SomePartial") %> 

그래서 "코드 수프"를 방지하기 위해 (if 문)에서 보기에서 다음

public static string RenderCustomPartial(this HtmlHelper helper, RouteData rd) 
{ 
    string partialName; 

    if (rd.Values["SomeParam"] == 1) 
    partialName = "PartialOneName"; 
    else 
    partialName = "PartialTwoName"; 

    return helper.RenderPartial(partialName); 
} 

그리고 :

보기, 당신은 ViewContext를 검사 한 후 RenderPartial를 통해 호출하는 HTML 도우미를 사용
<%: Html.RenderCustomPartial(ViewContext.RouteData) %> 

위와 같은 일부 모델을 만들 수 있습니다. 즉, 확장에서 직접 경로 데이터에 액세스하고 모델을 통과하여 부분 등에서 바인딩하는 등 아이디어를 얻을 수 있습니다.

위의 IF 문을 컨트롤러에서 수행하고 ViewData에 부분 뷰 이름을 채운 다음 View의 일반 RenderPartial 호출에서 사용할 수 있습니다.

무엇이든지 배를 부유시킵니다. :)