【问题标题】:MVC Render View to StringMVC 将视图渲染为字符串
【发布时间】:2015-02-12 15:52:58
【问题描述】:

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

我已经查看了 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。对此感到非常恼火,因为我在其他问题/帖子上遵循了几乎每个人的指示,但无法帮助我。

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

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

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

    在我更新了它的版本之后。现在回想起来我觉得很愚蠢,但这就是学习的意义所在!

    感谢大家的帮助和建议!

    我认为您不能将 cmets 标记为答案(至少据我所知),所以只需将其设置为更大的项目,以便未来的人们可以找到它。

    【讨论】:

    • 不客气。您可以投票给我的答案并将其标记为答案吗?我为积分工作。哈哈
    • 我没有看到任何按钮可以将评论标记为答案,否则我会......我确实赞成它。
    • 嗯...我还没有看到赞成票。也许以后会这样。你能确定“向上箭头”是橙色的吗?如果没有,您必须重新标记它。谢谢。
    • 是的,对我来说它是橙色的。这是否考虑将其标记为答案?认为这算作评论投票。
    • 嗯,这意味着你投了赞成票。至于将其标记为答案,我相信作为选项存在于答案本身之下。我有一段时间没问过问题了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多