Asp.net-mvc – How to send model object in Html.RenderAction (MVC3)

asp.net-mvcasp.net-mvc-3asp.net-mvc-partialviewrazor

I'm using MVC3 razor, and I'm trying to pass an object to a partial view, and it's not working.

This works fine without sending the object model to the partial view:

Html.RenderAction("Index", "ViewName");

Trying this doesn't sent the model object, i'm getting nulls instead (the object has data, and the view expects it):'

Html.RenderAction("Index", "ViewName", objectModel);

Is this even possible using RenderAction?

Thanks!

Edit: I found the error, there was an error with the controller's action that didn't pick up the sent object. Thanks for all your help!

Best Answer

You can actually pass an object to a controller method using Action. This can be done on any avaialble view, for instance I have one in a shared library that gets built to project bin folders that reference my shared project (properties - Copy if newer on the view file, in Visual Studio). It is done like so:

Controller:

public class GroovyController : Controller
{
    public ActionResult MyTestView(MyModel m)
    {
        var viewPath = @"~\bin\CommonViews\MyTestView";
        return View(viewPath, m);
    }
}

MVC page (using Razor syntax):

@Html.Action("MyTestView", "Groovy", new { m = Model })

or using RenderAction method:

@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }

Note: in the @Html.Action(), the Model object must be of type MyModel and that 3rd parameter must be set to the controller variable name, of which mine is MyModel m. The m is what you must assign to, so I do m = Model.