22

我需要显示Items一个实体的一些子对象 () Request。而不是请求,我发现传递一个包含比原始请求实体更多信息的视图更好。我调用的这个视图RequestInfo,它也包含原来的 Requests Id

然后在 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>

但是我在“无法将类型'void'隐式转换为'object'”RenderAction行上遇到编译器错误有什么想法吗?

4

2 回答 2

49

调用 Render 方法时需要使用此语法:

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

@syntax没有大括号的 ,需要一个返回到页面的返回类型。为了调用从页面返回 void 的方法,您必须将调用用大括号括起来。

请参阅以下链接以获得更深入的解释。

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

于 2013-01-04T12:26:54.533 回答
15

有用的替代方案:

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

此代码返回 MvcHtmlString。适用于部分视图和查看结果。不需要 {} 字符。

于 2013-11-03T21:25:42.953 回答