Using RenderAction(actionname, values) in MVC4 issue

asp.net-mvc c# entity-framework razor

Question

I need to display some child objects (Items) of an entity Request. Instead of Request I found it better to pass in a view that contains more info than the original Request Entity. This view I called RequestInfo, it also contains the original Requests Id.

Then in the MVC View I did :

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

To 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);
    }
}

Which would display a generic list :

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

But I am getting a compiler error on the RenderAction line "Cannot implicity convert type 'void' to 'object'" Any ideas?

1
22
1/5/2013 12:27:23 AM

Accepted Answer

You need to use this syntax when calling the Render methods:

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

The @syntax, without the curly braces, expects a return type which gets rendered to the page. In order to call a method that returns void from the page, you must wrap the call in curly braces.

Please see the following link for a more in-depth explanation.

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

49
7/14/2014 3:16:09 PM

Popular Answer

Usefully alternative:

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

This code returns MvcHtmlString. Works with partialview and view result. Doesn't require {} chars.



Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow