【问题标题】:ASP.NET MVC 3: Dynamically Loading Partial ViewsASP.NET MVC 3:动态加载局部视图
【发布时间】:2011-06-28 02:30:36
【问题描述】:

我想扩展现有的 CMS 系统,并尝试添加“模块”支持。

我的目标是能够通过在其自身的数据库内容中添加标记来应用模块。

例子:

<p>
    My fun content that is located in a paragraph tag
</p>
[news:1234]
 <p>
    ... more fun content within a different paragraph tag
</p>

上面的例子是非常特殊的,但你明白了。我希望能够动态加载news.cshtml 视图并使用1234 的新闻提要ID。

这样做的问题是模型中的内容是网络上的最后一件事,所以我不确定如何告诉index.cshtml 视图将标记换成news.cshtml 部分。

任何方向都会受到赞赏。

编辑

我也愿意接受有关如何在将控制器中的内容传递给视图之前解析它的建议。

【问题讨论】:

  • 它不是 Razor,但我很确定 Spark View Engine 允许通过多次解析视图来实现这一点。

标签: asp.net-mvc-3 content-management-system razor


【解决方案1】:

如果您不打算为标记解析内容,另一种方法是为要加载的内容放置一个实际的 div。

&lt;div class="news" id="1234"&gt;&lt;/div&gt;

然后在您的页面上有一些 javascript (jQuery),这些 div 填充了对服务器的调用。

$(function() {
  $('.news').each(function() {
    $.get('/CMS/LoadNews/' + $(this).attr('id')).appendTo($(this));
  }
}
^就在我的脑海中,还没有仔细检查它是否有效。

在大多数情况下,我更喜欢服务器端解析,但取决于此内容是什么以及它是否需要在页面加载时出现,这可能很有用。

【讨论】:

  • +1 因为我确实喜欢这个概念,不幸的是我需要该站点与启用非 Javascript 的浏览器兼容。
【解决方案2】:

创建一个自定义 HtmlHelper 扩展,用于解析内容、调用 Html.Action、使用结果更新文本并返回内容以供显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多