使用RenderAction(actionname, values)在MVC4问题

本文关键字:MVC4 问题 values RenderAction actionname 使用 | 更新日期: 2023-09-27 17:50:45

我需要显示实体Request的一些子对象(Items)。我发现传递一个包含比原始请求实体更多信息的视图来代替Request会更好。这个视图我称之为RequestInfo,它也包含了原始的请求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>

但我得到一个编译器错误在RenderAction"不能隐式转换类型'void'到'object'"任何想法?

使用RenderAction(actionname, values)在MVC4问题

在调用Render方法时需要使用这种语法:

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

没有花括号的@syntax期望呈现给页面的返回类型。为了从页面中调用返回void的方法,必须将调用用花括号括起来。

请看下面的链接获得更深入的解释。

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

有用的替代:

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

此代码返回MvcHtmlString。与partialview和view result一起工作。不需要{}字符