Я использую приведенный ниже код, и он работает нормально для меня. Я также использую его в Web API для возврата View в виде строки.
Для более подробной информации вы можете создать Статический класс и сделать приведенный ниже метод статическим.
public string RenderPartialView(string controllerName, string viewName, object model = null) {
System.Web.HttpContextBase contextBase = new System.Web.HttpContextWrapper(System.Web.HttpContext.Current);
var routeData = new RouteData();
routeData.Values.Add("controller", controllerName);
var controllerContext = new System.Web.Mvc.ControllerContext(contextBase, routeData,
new EmptyController());
var razorViewEngine = new System.Web.Mvc.RazorViewEngine();
var razorViewResult = razorViewEngine.FindPartialView(controllerContext, viewName, false);
var writer = new StringWriter();
System.Web.Mvc.ViewContext viewContext;
viewContext = new System.Web.Mvc.ViewContext(controllerContext, razorViewResult.View,
new System.Web.Mvc.ViewDataDictionary(model), new System.Web.Mvc.TempDataDictionary(), writer);
viewContext.ViewData["controller"] = controllerName;
HttpContext.Current.Items.Add("controller", controllerName);
razorViewResult.View.Render(viewContext, writer);
string htmlString = writer.ToString();
writer.Dispose();
return htmlString;
}
private class EmptyController: System.Web.Mvc.ControllerBase {
protected override void ExecuteCore() {}
}
Теперь, пожалуйста, найдите пример, как мы можем вызвать его с контроллера.
RenderPartialView("Home", string.Format("~/Views/Home/{0}.cshtml", "Index"));
Надеюсь, это будет полезно для вас.