【问题标题】:How to generate partial views from string in asp.net mvc?如何从 asp.net mvc 中的字符串生成部分视图?
【发布时间】:2015-01-20 16:22:37
【问题描述】:

在我的项目中,我有一个具有字符串属性的模型,其中包含具有剃须刀标准的内容。我需要编译属性以显示 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()
}
}

在剃刀视图中我有:

@model plugincontent

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

我认为 Html.Raw 可以帮助我,但事实并非如此。我需要像标准的局部视图一样渲染这个字符串内容。

【问题讨论】:

  • 你想解决什么真正的问题?为什么要在控制器/模型中生成 Razor 代码?为什么不首先创建局部视图?如果您想组合不同的局部视图,您可以使用 @Html.Partial 和视图名称。如果你想组合不同的 MVC 组件,你可以使用@Html.Display。 MVC 支持开箱即用的组合。
  • @PanagiotisKanavos,我的主要场景很大,我想从插件(不在主项目中)中的方法或属性中获取并显示 html 代码。此插件从程序集嵌入式资源中获取视图并将其作为字符串返回。我不想在插件中创建控制器以获得微小的结果。我可以发送带有 viewbag 或模型的 imodule(这是我的插件的接口)来查看,如果我可以在运行时将字符串编译为 html,我的场景就完成了。
  • MVC 已经有一个类似的概念,Html 助手。您现在尝试这样做的方式违反了 MVC 架构。 Razor 代码是关于 views 的。它不应该由 ViewModel 生成。
  • @PanagiotisKanavos,但我想通过 View 生成它。我发送一个标准剃须刀代码以查看模型,并且在视图中我想从中生成标准 html 代码。而且瘦这个还是挺符合mvc架构的。

标签: c# asp.net-mvc-5


【解决方案1】:

我不知道该怎么做你正在寻找的东西。在类似情况下我会做的是编写一个返回所需 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 README):var template = Template.Compile("Hello @Model.Name!"); Console.WriteLine(template.Render(new { Name = "World" }));
  • @FriedHoeben,非常感谢,您的链接在某些情况下可以帮助我。他们非常好。
  • @Taymaz,这些链接是否足以将我的答案标记为正确?
猜你喜欢
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 2021-06-16
  • 1970-01-01
相关资源
最近更新 更多