2013-01-04 26 views
19

Tôi cần hiển thị một số đối tượng con (Items) của một thực thể Request. Thay vì Yêu cầu, tôi thấy tốt hơn khi chuyển sang chế độ xem có chứa nhiều thông tin hơn Mục yêu cầu ban đầu. Chế độ xem này tôi gọi là RequestInfo, nó cũng chứa Yêu cầu ban đầu Id.Sử dụng RenderAction (actionname, values) trong số MVC4

Sau đó, trong MVC Xem tôi đã làm:

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

Để Render:

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

Trong đó sẽ hiển thị một danh sách chung:

@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> 

Nhưng tôi nhận được một lỗi biên dịch trên dòng RenderAction"Không thể thay đổi loại chuyển đổi 'void' thành 'o bject '" Bất kỳ ý tưởng nào?

Trả lời

43

Bạn cần phải sử dụng cú pháp này khi gọi các phương pháp Render:

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

Các @syntax, mà không có dấu ngoặc nhọn, hy vọng một kiểu trả về mà được kết xuất vào trang. Để gọi một phương thức trả về void từ trang, bạn phải kết thúc cuộc gọi trong các dấu ngoặc nhọn.

Vui lòng xem liên kết sau để xem giải thích chi tiết hơn.

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

14

hữu ích thay thế:

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

Mã này trả về MvcHtmlString. Làm việc với một phần xem và xem kết quả. Không yêu cầu {} ký tự.

+1

+1: Câu trả lời hợp lệ và phù hợp hơn với cú pháp Razor. Điều này cần thêm phiếu bầu :) –

Các vấn đề liên quan