爲了修改HTML輸出,在MasterPage的代碼隱藏中使用CsQuery的「框架」代碼是什麼?我需要能夠修改HTML的<body>
中的所有內容嗎?在MasterPage代碼隱藏中使用CsQuery來修改HTML輸出?
我希望能夠使用CsQuery來修改動態數據網站的HTML輸出,而不用重寫/搞亂默認代碼。
只是尋找特定於MasterPage代碼隱藏的示例代碼?謝謝。
爲了修改HTML輸出,在MasterPage的代碼隱藏中使用CsQuery的「框架」代碼是什麼?我需要能夠修改HTML的<body>
中的所有內容嗎?在MasterPage代碼隱藏中使用CsQuery來修改HTML輸出?
我希望能夠使用CsQuery來修改動態數據網站的HTML輸出,而不用重寫/搞亂默認代碼。
只是尋找特定於MasterPage代碼隱藏的示例代碼?謝謝。
CsQuery項目中有一個示例顯示如何在CsQuery.WebFormsApp項目中執行此操作(我只是確信它正常工作!)。
使用的核心看起來像這樣。您必須覆蓋繼承Page
一類Render
方法,並在ASPX頁面使用,而不是Page
作爲基類的代碼隱藏:
public class CsQueryPage: System.Web.UI.Page
{
public CQ Doc { get; protected set; }
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
// most of the work is done for you with the
// `CsQuery.WebForms.CreateFromRender` method
var csqContext = WebForms.CreateFromRender(this, base.Render, writer);
// if you are using update panels, this lets you also manipulate that
// HTML, otherwise you don't need the IsAsync part
if (csqContext.IsAsync)
{
foreach (var item in csqContext.AsyncPostbackData) {
Cq_RenderUpdatePanel(item.Dom,item.ID);
}
}
else
{
Doc = csqContext.Dom;
Cq_Render();
}
// writes the altered content to the base HtmlTextWriter
csqContext.Render();
}
protected virtual void Cq_Render()
{ }
protected virtual void Cq_RenderUpdatePanel(CQ doc, string updatePanelId)
{ }
}
兩個虛擬方法,在那裏你可以改變DOM,它被填充在CsQueryPage
對象的Doc
屬性中 - 在這裏將它們保留爲未實現的意圖是每個繼承了CsQueryPage
的aspx頁都可以選擇性地覆蓋它們並對DOM進行更改。
要在實踐中看到這是如何工作的,只需從github下拉CsQuery代碼並運行示例。
同樣的技術可用於UserControl
,這也在示例中顯示。我實際上沒有演示如何使用MasterPage
來做,但它非常相似 - MasterPage
來自UserControl
,您只是覆蓋它的Render
方法與其他情況相同。
感謝https://github.com/jamietre/CsQuery/blob/master/examples/CsQuery.WebFormsApp/CsQuery.WebFormsApp/CsQueryPage/CsQueryUserControl.cs是我應該看過的。值得一問,因爲我沒有意識到我需要UpdatePanels的額外代碼 - DynamicData項目使用了哪些額外的代碼(雖然在我的情況下目前是EnablePartialRendering =「false」)。 –
這實際上是你問的一件好事,因爲那個很長時間沒有碰到的例子有一些錯誤。是的 - 更新面板需要特殊處理,只有實際在面板中的HTML部分才能通過控件傳遞,並且每個都必須單獨處理。 –