【问题标题】:Passing Razor Markup to view and process it传递 Razor Markup 以查看和处理它
【发布时间】:2012-10-10 13:52:09
【问题描述】:

我已经在互联网上搜索了几天,但没有找到这个。

我的模型有一个属性,其中包含一个包含 Razor 标记的 html 块。 示例:

public class ViewModel 
{
    public string Content = "<div>@Html.TextBox(\"UserName\")</div>";
}

在视图中,我将其显示为

@Html.Raw(Server.HtmlDecode(Model.Content).toString())

我需要能够将 Razor 标记转换为 html,尽管由于内容是通过模型放入的,因此视图引擎不会对其进行处理。

  • 我尝试过简单地放入内容,仅使用 .Raw(Model.Content)、.Encode(Model.Content),但没有任何效果。

有什么想法吗?

【问题讨论】:

  • 似乎您违背了 MVC 框架的全部目的。为什么不直接从模型中传递实际数据并在视图中使用该数据创建标记?
  • 好点,详细说明项目:该站点使用页面编辑器,它将部分视图的全部内容存储在数据库中,并在请求时加载它。所以,我需要能够从包含剃刀标记的数据库中读取一个字符串。
  • 我怀疑您必须先将剃须刀解码为 HTML,然后才能将其保存到数据库。
  • 可能在这里回答? stackoverflow.com/questions/5153090/…
  • "该站点使用页面编辑器,它将部分视图的全部内容存储在数据库中,并在请求时加载。"同意。但是你应该只将值存储在数据库中并在局部视图中显示标记,然后你可以使用模型传递这些值。

标签: html asp.net-mvc razor asp.net-mvc-4


【解决方案1】:

您可以使用RazorEngine 包,它允许您解析和执行 Razor 代码。话虽如此,我不建议您让您的用户直接编辑 Razor 模板。您在您的网站上打开了一个巨大的安全漏洞。

还有其他模板引擎,例如 DotLiquid,它们更适合您不信任用户输入的场景。

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多