MVC渲染视图到字符串

时间:2015-02-12 15:52:59

标签: c# asp.net-mvc razor

我发现了一些像这样的问题,但是每一个问题我都无法解决这个问题。我不断遇到同样的问题。

我已经查看了thisthat以及其他多个人!每件事我都会遇到同样的问题。

我得到以下异常:

The view at '~/Views/Email/Ticket.cshtml' must derive from WebViewPage, or WebViewPage<TModel>.

我使用的代码是:

public static string RenderViewToString(string controllerName, string viewName, object viewModel)
{
    HttpContextWrapper context = new HttpContextWrapper(HttpContext.Current);
    RouteData routeData = new System.Web.Routing.RouteData();
    routeData.Values.Add("controller", controllerName);
    ControllerContext controllerContext = new ControllerContext(context, routeData, new RenderController());


    RazorViewEngine razorViewEngine = new RazorViewEngine();
    ViewEngineResult razorViewResult = razorViewEngine.FindView(controllerContext, viewName, string.Empty, false);


    using (StringWriter writer = new StringWriter())
    {
        ViewDataDictionary viewData = new ViewDataDictionary(viewModel);
        var viewContext = new ViewContext(controllerContext, razorViewResult.View, viewData, new TempDataDictionary(), writer);
        razorViewResult.View.Render(viewContext, writer);
        writer.Flush();
        return writer.GetStringBuilder().ToString();
    }
}

RenderController只是:

private class RenderController : ControllerBase
{
    protected override void ExecuteCore()
    {
    }
}

无论我做了什么,或者我尝试了不同的方法似乎都没有让这个错误消失,我试图让视图继承对象,但你不能同时拥有@model和@inherit事情。由于我几乎关注其他问题/帖子上的所有人的指示但是还没有能够帮助我,所以对此非常加重。

1 个答案:

答案 0 :(得分:0)

感谢@JustinRusso,他帮助解决了这个问题!

似乎发生的事情是,我在实际的web项目中对MVC 5.0.0.0的引用与我在我的Common库中引用的MVC版本不同,该库版本是4.0.0.1。

我更新了它的版本后。我现在回想起来感觉很愚蠢,但这就是学习的全部!

感谢大家的帮助和建议!

我认为你不能将评论标记为答案(至少从我能说的方面来看),所以只是把它作为一个更大的项目,以便将来人们可以找到它。