将动态字符串渲染为Razor

时间:2014-06-03 20:10:44

标签: c# asp.net-mvc razor

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

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

请注意&#34; @ DateTime.Now.Year&#34;?好吧,如果将它存储在数据库中,我将如何将其渲染到一个视图中,并将其中的一部分实际呈现为2014年(或者无论哪一年,您都在阅读此内容)?

3 个答案:

答案 0 :(得分:5)

您可以使用RazorEngine(NuGet包“RazorEngine”)。

软件包管理器控制台:

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>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果我理解正确,您将整个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))