Подтвердить что ты не робот

Использование RenderAction (имя-действия, значения) в выпуске MVC4

Мне нужно отобразить некоторые дочерние объекты (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 "Невозможно преобразовать тип implicity" void "в" object "" Любые идеи?

4b9b3361

Ответ 1

Вам нужно использовать этот синтаксис при вызове методов Render:

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

@syntax, без фигурных скобок, ожидает тип возврата, который отображается на странице. Чтобы вызвать метод, который возвращает void со страницы, вы должны завернуть вызов в фигурные скобки.

Для более подробного объяснения см. следующую ссылку.

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

Ответ 2

Использованная альтернатива:

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

Этот код возвращает MvcHtmlString. Работает с частичным просмотром и результатом просмотра. Не требует {} символов.