String ASP.NET MVC将部分视图渲染为字符串错误?

String ASP.NET MVC将部分视图渲染为字符串错误?,string,view,razor,String,View,Razor,为了发送电子邮件,我正在使用此代码尝试将razor部分视图呈现为字符串 public static string RenderPartialToString( string userControlPath, object viewModel, ControllerContext controllerContext, TempDataDictionary tempData) { using (var w

为了发送电子邮件,我正在使用此代码尝试将razor部分视图呈现为字符串

    public static string RenderPartialToString(
        string userControlPath,
        object viewModel,
        ControllerContext controllerContext,
        TempDataDictionary tempData)
    {
        using (var writer = new StringWriter())
        {
            var viewDataDictionary = new ViewDataDictionary(viewModel);
            var view = new WebFormView(controllerContext, userControlPath);
            var viewContext = new ViewContext(
                controllerContext,
                view,
                viewDataDictionary,
                tempData,
                writer
                );

            viewContext.View.Render(viewContext, writer);

            return writer.GetStringBuilder().ToString();
        }

    }
问题是我得到了以下错误:

must derive from ViewPage, ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>. Stack Trace:  at  System.Web.Mvc.WebFormView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) at .... RenderPartialToString
必须派生自ViewPage、ViewPage、ViewUserControl或ViewUserControl。堆栈跟踪:位于。。。。渲染投影

我该如何解决这个问题呢?

事实上,
WebFormView
并不是从上述类继承的,只是
IView
。我在谷歌做了一点调查,得到了一个原型。他是最有帮助的

我创建了一个空的MVC3应用程序,并创建了以下
HomeController
。当我运行应用程序时,页面显示呈现的字符串。
resultAsString
变量显示了如何将渲染捕获为字符串

using System;
using System.IO;
using System.Web.Mvc;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var result = RenderPartial(this.ControllerContext, "This is @DateTime.Now right now");
        var resultAsString = result.Content;
        return result;          
    }

    private ContentResult RenderPartial(ControllerContext controllerContext, string template)
    {
        var temporaryViewPath = string.Format("~/Views/{0}.cshtml", Guid.NewGuid());
        using (var stringWriter = new StringWriter())
        {
            using (var fileStream = System.IO.File.Create(Server.MapPath(temporaryViewPath)))
            {
                using (var streamWriter = new StreamWriter(fileStream))
                {                       
                    streamWriter.WriteLine(template);
                    streamWriter.Close();
                }
                fileStream.Close();
            }
            var razor = new RazorView(controllerContext, temporaryViewPath, null, false, null);
            razor.Render(new ViewContext(controllerContext, razor, new ViewDataDictionary(), new TempDataDictionary(), stringWriter), stringWriter);
            System.IO.File.Delete(Server.MapPath(temporaryViewPath));
            return Content(stringWriter.ToString());
        }
    }
}

您能指定一些代码吗?我应该将它定义为什么?我发布了一个工作原型的代码。方法签名是不同的,但是您应该能够根据需要调整它。