2012-07-15 3 views
0

부분 뷰를 사용하여 카테고리 사이드 메뉴를 작성하는 책에서 자습서를 수행 중이었습니다. 현재 선택된 범주를 표시하는 기능이 구현 될 때까지 문제가 없습니다.PartialView 로직으로 데이터 전달하기

과 같이 문제가 발생하여 현재 선택된 범주를 부분보기에 전달하는 데 논리가없는 것처럼 보입니다. 당신이 NavController 보면 선택한 카테고리 ID가

전달되지 않는 볼 수있는 메뉴 방법은 선택 범주 ID를 받아들이으로

레이아웃 CSHTML 파일이 표시 카테고리

@{ 
    Html.RenderAction("Menu", "Nav"); 
    } 

에 대한이

public PartialViewResult Menu(int selCatID = -1) 
    { 
     ViewBag.SelectedCatID = selCatID; 
     return PartialView(repository.Categories); 

    } 

그러나 layout.html 파일에서 호출하면 매개 변수없이 selCatID가 호출되는 것으로 보입니다. 항상 일 수 -1 여기

@foreach (var cat in Model) 
{ 
@Html.RouteLink(cat.CategoryName , new { 
controller = "Company", action="List" 
     , catID=cat.ID, page= 1}, 
    new { @class = cat.ID == ViewBag.SelectedCatID ? "selected" : null } 
) 
} 

하기위한 뷰에 전달되는 메인 컨트롤러 (회사)에서 선택한 CATID를 보여줍니다 눈에 보이는 코드이있을 것 같지 않습니다 메뉴의보기이다 NavController.

주 컨트롤러가 선택된 ID에 대한 뷰백을 설정해야한다고 생각했습니다. 다음과 같이 변경되었지만 작동했지만 올바른 기술인지 확실하지 않습니다. 내가 제대로하고 있는지 궁금 해서요 아니면 뭔가 놓친 적이 있습니까?. 한 매개 변수를 전달 레이아웃 파일

: 메인 엔티티 제어기 (CompanyController)에

Html.RenderAction("Menu", "Nav", new { selCatID = ViewBag.SelCatID }); 

public class CompanyController : Controller 
{ 
    ..... 
public ViewResult List(int catID = -1, int page = 1) 
     { 
     CompaniesListViewModel viewModel = new CompaniesListViewModel 
     { 
     ........... 
     }; 

     ViewBag.SelectedCatID = catID; 
     return View(viewModel); 
+0

catID가 -1을받는 액션이 ​​왜 그렇습니까? –

+0

CatID! = catID. –

+0

TravisJ 여기에 입력 할 때 오타가 수정되었습니다. 책에서이 서식을 사용하고 있었기 때문에이 사용법을 사용하지 않았습니다. Andre - -1이 있으므로 catID는 선택적 매개 변수입니다. -1은 카테고리가 선택되지 않았 음을 나타냅니다. – pt123

답변

1

문제점이 코드

이었다 현재 선택된 ID의 viewbag 세트
Html.RenderAction("Menu", "Nav", new { selCatID = ViewBag.SelCatID }); 

매개 변수를없이 추가했습니다. NULL 값을 전달하고 첫 번째 실행에서 충돌합니다. 그래서 다시 변경했습니다 : Html.RenderAction ("Menu", "Nav");

널 (null)을 처리하려면, 나는 널 (NULL) INT

public PartialViewResult Menu(int? selCatID = -1) 
    { 
     ViewBag.SelectedCatID = selCatID; 

에 매개 변수를 변경 그리고 지금 모두가 노력하고 있습니다.

관련 문제