【问题标题】:Rendering HTML as string from a razor file and a poco class将 HTML 呈现为来自剃刀文件和 poco 类的字符串
【发布时间】:2017-02-22 18:40:43
【问题描述】:

我有一个简单的剃​​须刀文件 _modelTemplate.cshtml 和一个 poco 类模型。 我希望能够通过将模型传递给 _modelTemplate.cshtml 来呈现 HTML 字符串

原因:我正在开发一个遗留的 WebForms 应用程序,并且真的很想使用 razor 作为模板引擎来为不需要 WebForms 服务器控件或回发的特定部分生成干净的 HTML。

我不需要 Razor 文件中的任何 MVC 帮助程序,只需要一个简单的模板和一个绑定模型。我想我可以使用 razor 生成 HTML,然后将该呈现的字符串绑定到 WebForm 的 .aspx 页面中的 Literals 的 .Text 属性。

我在想这样的事情:

Lit1.Text = RenderRazorTemplateAsString(razorFilePath, model);

有没有办法做到这一点,还是我必须建立一些东西?

【问题讨论】:

  • controller.ViewData.Model = 模型;字符串结果 = string.Empty;使用 (StringWriter writer = new StringWriter()) { ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer); viewResult.View.Render(viewContext, writer);结果 = writer.ToString(); }
  • 或者你只是想要 Html.Raw()?
  • 谢谢,但我不确定你在说什么。这不是 MVC 项目,而是 WebForms。我只需要从 poco 模型和模板渲染 html。我只想使用 Razor 作为没有 MVC 的引擎。所以,我想我只会添加对 System.Web.Razor 的引用,如果需要的话,可能还会添加 System.Web.WebPages。
  • 对不起...WebForms 对我来说太经典了..
  • 有趣的问题。我没有答案,但对这种可能性感到好奇。似乎要让 Razor 工作,您需要使用 Razor 指令嵌入页面的视图或 HTML 部分?为此,您需要创建一个带有 .cshtml 扩展名的页面,此时我认为您最好只写出自己的 HTML

标签: c# razor webforms


【解决方案1】:

我通过创建以下项目解决了这个问题。

我已将其发布到名为 WebFormsRazor 的 github。它符合我的要求,它只使用 Microsoft 引用,我可以用 1 行代码呈现 HTML。

Lit1.Text = RazorTemplate.Render(myModel, "template.cshtml");

有一个缺点,您的 razor 模板必须继承自项目中名为 RazorWebPage 的类,该类派生自 WebPageBase。

@inherits WebFormsRazor.RazorWebPage<myModel>

也许这个限制可以通过更好的代码来克服,但需要一种方法将 poco 类模型附加到页面,以便将其用于剃须刀绑定。

也许有更好的方法可以做到这一点,但这就是我现在解决的方法,它可以满足我的需求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 2019-12-09
    • 2016-06-25
    • 1970-01-01
    • 2020-06-11
    • 2022-08-24
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多