假设这是 MVC 看看我的CsQuery项目。CsQuery 是一个 jQuery 端口和 CSS 选择器引擎,您可以使用它直接处理 HTML。但更重要的是,该项目包含一个示例,其中包含在 MVC 下以 C# 呈现页面之前访问页面 HTML 的代码。
访问局部视图非常容易,请参阅 Rick Strahl 的有关该主题的博客文章。
但是,如果您想访问页面的整个 HTML 并可能在呈现之前对其进行更改,则需要创建一个 custom ViewEngine
,并对控制器进行回调,以便您可以访问 HTML。正确地做到这一点涉及很多。与其复制数百行代码,不如看一下 CsQuery 中包含的示例 MVC 应用程序,特别是CsQueryView
文件夹中的类:
https://github.com/jamietre/CsQuery/tree/master/examples/CsQuery.MvcApp
这包括一个自定义视图引擎和一个自定义 Controller 基类,可让您向控制器添加方法,如下所示:
// runs for all actions
public void Cq_Start()
{
Doc["a.not-allowed"]
.Attr("onclick","javascript:alert('You're not authorized to click this')");
}
// runs for the Index action
public void Cq_Index()
Doc["div"].Css("border", "1px solid red;");
}
这些方法在对应的常规操作方法之后调用,并设置 的值Doc
。Doc
是一个CQ
对象(CsQuery 中的核心对象)。这包含页面的所有 HTML。它就像一个 jQuery 对象。在您的情况下,您可以使用 jQuery 方法,例如:
// select all divs on the page
var div = Doc["div"];
// do parameter substitution
var newText = div.Text().Replace("@name", valid_name);
// update the text
div.Text(newText);
要切换您的 MVC 应用程序以使用此视图引擎,您需要将此代码添加到Application_Start
:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CsQueryViewEngine());
但是,如果不想使用 CsQuery,该示例应该向您展示如何在 MVC 中访问 HTML 输出,然后再呈现。它使用反射来找出在控制器中回调的方法,并且可以很容易地调整它以提供 HTML 字符串而不是 CsQuery 对象。