2013-01-20 1 views
3

저는 아직 MVC 3에 새로운 것이 있습니다. @ Html.Action 메소드의 데이터를 컨트롤러를 통해 부분 뷰로 전달해야합니다.Html.Action에서 부분 뷰로 데이터 전달하기

여기 내 흐름이 있습니다.

나는 @ Html.Action이 같은 전화 할게 :

@Html.Action("SidebarMain", "Home", new List<int>(new int[] {1, 2, 3})) 

그럼 내 컨트롤러에 타격을 줄 것으로 예상된다.

public ActionResult SidebarMain(List<int> items) 
{ 
    return View(items); 
} 

그런 다음 내 부분보기과 같이 데이터에 액세스 할 수 있어야한다 : 여기 내 홈 컨트롤러 내 방법입니다

@model List<int> 

@{ 
    ViewBag.Title = "SidebarMain"; 
    Layout = null; 
} 

<div> 
@foreach (int item in Model) 
{ 
    <div>@item</div> 
} 
</div> 

는하지만 : 나는 모델에 대한 널 (null) 예외를 받고 있어요, 의미는 통과하지 못합니다. 당신이 다스 베이더에서 items

+1

왜 이렇게 내가하고 결국 무엇인가 코멘트없이 downvote? – abatishchev

답변

4

이보십시오. 이걸 아약스로 돌려 보내고 있니? 당신이 기본보기에서 삽입하는 경우, 당신은 정말 SidebarMain 당신이 반환하는 부분보기의 이름입니다 이것은

return PartialView("SidebarMain", model); 

와 PartialView로 반환해야합니다. DarthVader가 제안한 것과 함께 이것을 시도해보고 모델이 뷰로 돌아가는 지 확인하십시오.

게시 후, 나는 당신이 Html.Action을 사용하고 있다는 것을 깨달았습니다. 이것이 진정한 사이드 인 경우,이 부분보기로 아약스로드해야하며, 당신은 당신이 당신의 현재 페이지에 머물 수

Ajax.ActionLink("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) }) 

를 호출해야합니다. 당신이 AJAX 기능을 찾고되지 않은 경우, 나는 토끼의 흔적 : 한마디로

0

좋은 대답을 얻는 경우,

Html.Action("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) }) 

을 그리고 확인하려면 SidebarMain 조치에 중단 점을 넣어 :

1

사과 : 코드가 Html.Action()항목 매개 변수 이름이 없습니다. 그 외의 코드는 기능적이어야합니다.

Html.Action("SidebarMain", "Home", new {items = new List<int>(new int[] {1, 2, 3}) }) 

제안 사례로서, 난 그냥 정수의 배열을 보내지 않고 내보기에 전용 ViewModel을 사용합니다. 뷰에 표시되는 속성의 컨테이너 인 깨끗한 ViewModel의 경우에는 코드가 항상 진화하므로 나중에 코드에 다른 속성이 추가 될 수 있습니다. 뷰 모델 개념의 사용에

참조 : Exercise 5: Creating a View Model

+0

ViewModel에 의해 명확히하기 위해보기가 정확히 입력 된 모델을 의미합니까? –

+0

네 말이 맞아요, 그 요점은 내 두 번째 단락에서 설명/언급하려고합니다. –

+1

와우 감사합니다. 매개 변수 이름이 컨트롤러에서와 같이보기에 동일해야한다는 것을 알지 못했습니다. – coggicc

0

다스 베이더의 제안 일 수 있습니다.

1) 제거이처럼 호출 컨트롤러

2) :

@{Html.RenderPartial("SidebarMain", new int[] {1,3,4,2});} 

3) 여기 내보기 코드 :

@model int[] 
@foreach(int item in Model){ 
...