2013-01-04 1 views
19

엔터티 Request의 일부 자식 개체 (Items)를 표시해야합니다. 요청 대신 원래 요청 엔터티보다 많은 정보가 포함 된보기를 전달하는 것이 좋습니다. 이 뷰에서는 RequestInfo이라고 부르며 원래 요청은 Id입니다.MVC4에서 RenderAction (actionname, values) 사용 문제

그런 다음 MVC보기에 내가 그랬어 :

@model CAPS.RequestInfo 
...  
@Html.RenderAction("Items", new { requestId = Model.Id }) 

는 렌더링하려면 일반 목록을 표시 할

public PartialViewResult Items(int requestId) 
{ 
    using (var db = new DbContext()) 
    { 
     var items = db.Items.Where(x => x.Request.Id == requestId); 
     return PartialView("_Items", items); 
    } 
} 

:

@model IEnumerable<CAPS.Item> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Code) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Description) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Qty) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Value) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Type) 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Code) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Description) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Qty) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Value) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Type) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.Id }) | 
      @Html.ActionLink("Details", "Details", new { id=item.Id }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.Id }) 
     </td> 
    </tr> 
} 

</table> 

그러나 내가 컴파일러 오류를 얻고있다 RenderAction"암시 적 유형을 'void'에서 'o'로 변환 할 수 없습니다. bject ' " 아이디어가 있으십니까? 렌더링 메소드를 호출 할 때

답변

43

는이 구문을 사용해야합니다

@{ Html.RenderAction("Items", new { requestId = Model.Id }); } 

@syntax은 중괄호없이 페이지로 렌더링됩니다 반환 유형을 기대하고있다. 페이지에서 void를 반환하는 메서드를 호출하려면 중괄호로 묶어야합니다.

자세한 내용은 다음 링크를 참조하십시오.

http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

14

유용하게도 대안 :

@model CAPS.RequestInfo 
...  
@Html.Action("Items", new { requestId = Model.Id }) 

이 코드는 MvcHtmlString를 반환합니다. 부분보기 및보기 결과로 작동합니다. {} 문자는 필요하지 않습니다.

+1

+1 : 똑같이 유효한 답변이며 면도기 구문에 더 적합합니다. 이건 더 많은 표가 필요해. :) –

관련 문제