我想知道是否可以在将视图HTML发送到浏览器之前对其进行修改。
我想创建一个自定义标签编译器,我可以在其中插入一个简单的标签作为视图<my-parsing-tag></my-parsing-tag>
,并将其替换为某些特定的 HTML。
我已经在使用OnActionExecuting
和OnActionExecuted
过滤器对上下文执行一些操作(更改 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扩展的用武之地。您可以创建一个扩展方法,该方法根据传递给它的信息呈现分部视图,或者创建一组基于所需小部件有选择地调用的扩展方法。