如何显示模型 属性 中的 Cshtml? ASP.NET 核心 MVC

How to display Cshtml from Model property? ASP NET Core MVC

希望我的问题比较简单。使用 ASP.NET Core MVC 和 Visual Studio.

我有一个将存储 cshtml 的数据库。我会将其读入 index.cshtml 文件顶部的模型 属性。

对于某些部分,如果我刚开始在 cshtml 文件中包含它,我需要显示它呈现的 cshtml。

大部分情况下使用它 --> @Html.Raw(Model.htmlcontent)

但是,所有 @Model.Property 位都显示为那样,而不是像我想要的那样实际插入值。

是否有像 Html.Raw 这样的另一种方法可以做到这一点,或者有什么好的方法吗?

谢谢

您将 razor 视图存储在数据库中,因此您需要首先将 razor 代码编译为实际的 html 代码,然后使用 @Html.Raw() 以样式显示 html 代码.

如果你只想显示模型 属性,你可以使用 RazorEngineCore 仅支持 .net 5 的库:

型号:

public class RazorModel
{
    public string htmlcontent { get; set; }
}
public class TestModel
{
    public string Name { get; set; }
    public int[] Items { get; set; }
}

查看:

@model RazorModel

@Html.Raw(Model.htmlcontent)

控制器:

[HttpGet]
public IActionResult Index()
{
    IRazorEngine razorEngine = new RazorEngine();
    string templateText = "<h1>Hello @Model.Name<h1>  <table>@foreach (var item in Model.Items) {<tr>@item</tr>}</table>";
    IRazorEngineCompiledTemplate<RazorEngineTemplateBase<TestModel>> template = razorEngine.Compile<RazorEngineTemplateBase<TestModel>>(templateText);
    var model = new RazorModel();
    model.htmlcontent = template.Run(instance =>
    {
        instance.Model = new TestModel()
        {
            Name = "Rena",
            Items = new[] { 3, 1, 2 }
        };
    });

    return View(model);
}

如果你使用asp.net核心3.x或任何其他版本,你可以安装RazorEngine.NetCore library and follow the document:

[HttpGet]
public IActionResult Index()
{
    var model = new RazorModel();
    string template = "<h1>Hello @Model.Name<h1>  <table>@foreach (var item in Model.Items) {<tr>@item</tr>}</table>";
    model.htmlcontent =
        Engine.Razor.RunCompile(template, "templateKey", null, new { Name = "World" , Items = new[] { 3, 1, 2 } });


    return View(model);
}