【问题标题】:C# MVC modify View HTML before rendering on browserC# MVC 在浏览器上渲染之前修改 View HTML
【发布时间】:2017-05-11 01:43:44
【问题描述】:

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

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

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

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

编辑

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

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

之后,我会将选定的 HTML 附加到视图中,然后再将其发送给用户。该系统适用于无法编辑视图的用户,因为他们不使用 HTML。

编辑 2

经过一些研究,我尝试实现自定义RazorView,代码是here,带有Index View HTML,但现在我有两个问题:

第一个是我的索引视图有一些来自数据库的 HTML,并使用我的 ViewModel 上的 vars 放置在那里,而不是在我的索引视图的末尾放置调用操作 HTML,而是放置它在 ViewModel 变量之前。第二个问题是 HTML 被复制而不是被替换。这是结果的图像:

http://imgur.com/a/elul1

【问题讨论】:

  • 为什么要重新发明轮子?您需要对“自定义”标签做什么?
  • @Juan,我已经用解释更新了我的问题。
  • 这是否意味着用户将在某个字段中键入它并在运行时替换它?我不确定我是否理解。
  • 假设用例就是 Juan 所说的,你可以使用 HtmlHelper 上的 Extension 方法,并使用 TagBuilder 随意操作视图 - docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/…
  • @Juan,我将有一个管理页面,用户将在其中选择他想要包含的页面,比如说一个时事通讯表单,用户可以从组合框中选择主页,或者他可以编辑查看并包含自定义标签。如果我使用第一个选项或第二个选项,我需要编辑 HTML 响应并包含表单,然后再将其发送到浏览器

标签: c# html asp.net-mvc-3


【解决方案1】:

您可以为此使用 HtmlHelper 扩展:

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

我建议如下:

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

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

【讨论】:

  • 这可以工作,但我并不总是将用户 HTML 放在底部,它可以放置在页面的任何位置,这就是为什么需要 <my-parsing-tag></my-parsing-tag>,也是这样拦截解析后的视图html?
  • 没关系。不要删除自定义标记,而是删除对 HtmlHelper 扩展的调用。
  • 这对我来说真的不起作用,我无法让它在解析后的 H​​TML 上工作并将其注入回用户,你有任何工作示例吗?
猜你喜欢
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2014-01-05
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
相关资源
最近更新 更多