C# 如何在asp.net mvc中从字符串生成局部视图?

C# 如何在asp.net mvc中从字符串生成局部视图?,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,在我的项目中,我有一个模型,它有一个字符串属性,其中包含符合razor标准的内容。我需要编译属性以显示html结果 在viewModel中,我有如下代码: public class PluginContent{ public string Content {private set;get;} private void FillContent() { Content ="@{int count=10; fore (int i=0;i<count;i++) <b>@i.toStr

在我的项目中,我有一个模型,它有一个字符串属性,其中包含符合razor标准的内容。我需要编译属性以显示html结果

在viewModel中,我有如下代码:

public class PluginContent{
public string Content {private set;get;}
private void FillContent() {
 Content ="@{int count=10; fore (int i=0;i<count;i++) <b>@i.toString() </b>}";
}
public PluginContent(){
FillContent()
}
}
在razor看来,我有:

@model plugincontent

<h3>Your content is: </h3>
@Html.Raw(Model.Content)

我原以为Html.Raw可以帮助我,但事实并非如此。我需要将此字符串内容呈现为标准的局部视图。

我不知道如何准确地执行您正在寻找的操作。在类似情况下,我要做的是编写一个返回所需HTML的方法,而不是Razor来生成HTML并从视图中调用它

比如:

public IHtmlString Content()
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++)
{
sb.Append("<b>");
sb.Append(i.ToString());
sb.Append("</b>");    
}

     return new MvcHtmlString(sb.ToString());
}
如果您真的想让Razor生成HTML,请查看以下内容


OP询问如何显示内容字符串,而不是如何生成它。无论如何,ASP.NET MVC已经支持部分视图。在Razor中,您只需要键入@Html.Partial…这不是我的答案,我需要一种在运行时编译字符串的方法,就像javascript中的eval方法一样。我指出的库允许您在运行时编译字符串。例如,来自RazorTemplates自述文件:var template=template.CompileHello@Model.Name!;Console.WriteLinetemplate.Rendernew{Name=World}@FriedHoeben,非常感谢,您的链接在某些情况下可以帮助我。它们非常好。@Taymaz,这些链接是否足以帮助我将答案标记为正确?你想解决什么真正的问题?为什么在控制器/模型中生成Razor代码?为什么不先创建一个局部视图呢?如果要组合不同的局部视图,可以使用@Html.partial和视图名称。如果您想组成不同的MVC组件,可以使用@Html.Display。MVC支持开箱即用的合成。@PanagiotisKanavos,我的主要场景很大,我想从插件中而不是主项目中的方法或属性中获取并显示html代码。此插件从程序集嵌入资源获取视图,并将其作为字符串返回。我不想在插件中为微小的结果创建控制器。我可以发送IModule,这是我的插件与viewbag或model的接口,如果我可以在运行时将字符串编译成html,我的场景就完全完成了。MVC已经有了类似的概念,html助手。您现在尝试这样做的方式违反了MVC体系结构。Razor代码是关于视图的。它不应该由ViewModel生成。@PanagiotisKanavos,但我想按View生成它。我发送一个标准的razor代码来查看一个模型,在视图中,我希望从中生成标准的html代码。这与mvc架构非常一致。