【问题标题】:Loading a partial view in code with ASP.NET MVC 4 / Razor使用 ASP.NET MVC 4 / Razor 在代码中加载部分视图
【发布时间】:2016-02-15 12:27:56
【问题描述】:

我有一个需求,我正在构建一个 HtmlHelper 扩展,它将呈现代码文章:

class Article
{
    public string Title { get; set; }
    public string Description { get; set; }
    public string ViewName { get; set; }
}

到目前为止,我可以让它正确呈现标题和描述,但是如何将视图中的 HTML 加载到我的帮助程序中并也呈现呢?

帮助程序如何工作的示例:

public static Article(this HtmlHelper helper, Article article)
{
    return $"<h1>{article.Title}</h1>";
    //...need to load/append View HTML as well before returning
}

【问题讨论】:

  • HtmlHelper 扩展方法返回MvcHtmlString。不清楚你在这里想做什么。
  • @StephenMuecke 在我的局部视图中,有一些 HTML。我想在文章被渲染之前将这个 HTML 添加到文章中(所以基本上我正在编写一个包装器,在部分视图中将文章包装在一些 HTML 周围) - 这有帮助吗?
  • @series0ne 您应该将部分视图的 HTML 设计为从 Helper 接收 Html,而不是相反。您必须在您的 html 中设置一些结构,以期待您的助手呈现的 html
  • @PedroBenevides 我想要它的另一个原因是,我想以两种方式呈现 HTML,1. 我想呈现视图中的 HTML;其次,我想将 HTML 呈现为页面上的代码块,以便人们可以看到创建示例中的视图的 HTML 代码。
  • @series0ne 只是为了澄清这一点,这不是部分观点......这是 HTML MVC 助手,它们是完全不同的两件事......我建议你更改标题。跨度>

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

我自己找到了答案;为了帮助他人:

public static MvcHtmlString Article(this HtmlHelper helper, Article article)
{
    StringBuilder sb = new StringBuilder();
    sb.Append($"<h1>{article.Title}</h1>");
    sb.Append(helper.Partial(article.ViewName).ToHtmlString());
    return new MvcHtmlString(sb.ToString());
}

【讨论】:

  • 您不能在部分中包含标题?把你从这里救出来...?
  • 这更复杂——这是一个非常基本的例子;实际上,整个内容呈现标题、水平规则、描述、包含 HTML 的面板、包含用于 HTML 的代码的面板页脚(部分视图中的相同 HTML,加载方式不同) ,并且还针对文章创建唯一 ID 用于锚导航
  • 还不错...解决方案做得很好...我想我在苦苦挣扎,因为我不知道全部意图。我会使用嵌套的部分视图,但这可能更适合您的要求 - 投票赞成 ;-)。您不需要将视图模型传递给您的 Partial
猜你喜欢
  • 1970-01-01
  • 2012-12-05
  • 2021-08-13
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 2011-03-31
  • 2017-06-14
  • 1970-01-01
相关资源
最近更新 更多