Asp.net mvc 3 ASP.NET MVC 3:动态加载局部视图

Asp.net mvc 3 ASP.NET MVC 3:动态加载局部视图,asp.net-mvc-3,content-management-system,razor,Asp.net Mvc 3,Content Management System,Razor,我想扩展现有的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> 位于段落标记中的我的有趣内容 [新闻:123

我想扩展现有的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>

位于段落标记中的我的有趣内容

[新闻:1234] ... 在不同的段落标记中包含更多有趣的内容

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

问题是,模型中的内容是最后一件事,因此我不知道如何告诉
index.cshtml
视图将标记替换为
news.cshtml
部分

任何指示都将不胜感激

编辑
在将内容传递给视图之前,我还愿意听取有关如何解析控制器中内容的建议。

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

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

<div class="news" id="1234"></div>
然后在页面上有一些javascript(jQuery),它用对服务器的调用填充这些div。
$(function() {
  $('.news').each(function() {
    $.get('/CMS/LoadNews/' + $(this).attr('id')).appendTo($(this));
  }
}
$(函数(){
$('.news')。每个(函数(){
$.get('/CMS/LoadNews/'+$(this.attr('id')).appendTo($(this));
}
}
^我还没仔细检查过它的工作原理呢


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

+1因为我很喜欢这个概念,不幸的是,我需要该站点与非支持Javascript的浏览器兼容。它不是Razor,但我确信Spark View Engine允许这样做通过多次解析视图。