C# MVC 在浏览器上呈现之前修改视图 HTML



我想知道是否可以在将视图HTML发送到浏览器之前对其进行修改。

我想创建一个自定义标签编译器,我可以在其中插入一个简单的标签作为视图<my-parsing-tag></my-parsing-tag>,并将其替换为某些特定的 HTML。

我已经在使用OnActionExecutingOnActionExecuted过滤器对上下文执行一些操作(更改 ViewBags、视图名称、会话等),我也尝试在那里执行此操作,但我找不到正确的位置来获取 HTML,好吧,我什至不知道是否可以这样做。

是否有可能,或者我需要将我的视图 HTML 存储在数据库中才能完成我需要的?

编辑

正如@Juan所问的,为什么我需要它:

我正在使用一个号召性用语系统,用户可以在其中使用那些简单的标签或选择将显示它的页面,在他想要的页面上放置一些特定的模态活动。

之后,我将在将选定的 HTML 发送给用户之前将其附加到视图中。此系统适用于由于不使用 HTML 而无法编辑视图的用户。

编辑 2

经过一些研究,我尝试实现自定义RazorView,代码在这里与索引视图 HTML 一起,但现在我有两个问题:

第一个是我的索引视图有一些来自数据库的 HTML,并且使用我的 ViewModel 上的变量放置在那里,而不是将号召性用语 HTML 放置在索引视图的末尾,而是放在 ViewModel 变量之前。第二个问题是HTML被复制而不是替换。以下是结果的外观图像:

https://i.stack.imgur.com/wPKLM.jpg

你可以使用一个 HtmlHelper 扩展来实现这一点:

http://tech.trailmax.info/2012/08/creating-custom-html-helper-in-mvc3/

我建议如下:

  • 在您的模板(很可能是布局)中定义一个容器,该容器将接收用户决定通过管理面板"放入"其中的任何内容。
  • 您让视图知道有内容要通过 ViewBag 显示。
  • 视图使用您传递的信息来呈现所需的内容。

它的呈现方式是HTMLHelper扩展的用武之地。您可以创建一个扩展方法,该方法根据传递给它的信息呈现分部视图,或者创建一组基于所需小部件有选择地调用的扩展方法。

最新更新