渲染动态字符串为剃刀

本文关键字:剃刀 字符串 动态 | 更新日期: 2023-09-27 18:06:36

我试图呈现存储在我的数据库中的字符串,就好像它来自CSHTML文件一样。这里是一个示例字符串,我想渲染:

<footer>
    <div class="content-wrapper">
        <div class="float-left">
            <p>&copy; @DateTime.Now.Year - My ASP.NET MVC Application</p>
        </div>
    </div>
</footer>

注意"@DateTime.Now.Year"?如果这被存储在数据库中,我该如何渲染到视图中让这部分渲染为2014年(或你正在阅读这篇文章的年份)

渲染动态字符串为剃刀

您可以使用RazorEngine (NuGet包"RazorEngine")。

Package Manager Console:

PM> install-package razorengine

在你的代码中:

string template = GetYourTemplateFromDatabase();
string content = RazorEngine.Razor.Parse(template, null);

如果您想将此输出添加到实际视图中,则必须将其添加为IHtmlString或使用@Html.Raw(ViewBag.Content):

控制器代码(对于IHtmlString):

ViewBag.DatabaseCode = MvcHtmlString.Create(content);

视图代码:

<div>
    @ViewBag.DatabaseCode
</div>

你需要在razor中定义一个模型这是一个很好的例子http://weblogs.asp.net/scottgu/asp-net-mvc-3-new-model-directive-support-in-razor

如果我理解正确,您将整个HTML片段存储在数据库中?您可以对从数据库获得的字符串执行简单的String.Replace操作。

<footer>
    <div class="content-wrapper">
        <div class="float-left">
            <p>&copy; {{YEAR}} - My ASP.NET MVC Application</p>
        </div>
    </div>
</footer>

然后在视图中:

@Html.Raw(Model.Footer.Replace("{{YEAR}}", DateTime.Now.Year))