Sometimes required when you just don't have your JavaScript templating in place..
I tend to wrap this in a protected method in a base controller:
protected string RenderToString(string partial, object model)
{
return this.RenderPartialToString(partial, model);
}
You can then call it like so:
var html = RenderToString("~/Path/To/Partial.cshtml", viewModel);
Props to Kevin Craft at CraftyCode for this.