我在這裏有一個解決方案,但它不是我會強烈建議的。它有着與開發人員忘記放入腳本標記塊或讓他們記住放置「body runat = server」或其他此類技術的脆弱性相同,但它們稍微不會忘記「」標籤。
基本上,您可以在PreRender期間迭代頁面中的文字標記,找到關閉的正文標記並在其之前插入腳本。但是,如果您的母版頁開發人員忘記了/ body標籤,它將無法工作。你可以加強它以尋找/ html或最糟糕的,只是簡單地做一個Page.Controls.Add()
使它出現在所有東西之後,但這不是有效的html。
下面的代碼(改編自一個簡單的例子,我發現here):
public void Page_PreRender(object sender, EventArgs e)
{
int x = -1;
var control = FindBodyTag(this, out x);
this.Page.Controls.AddAt(x, new LiteralControl("test"));
}
public LiteralControl FindBodyTag(Control parentCtl, out int ctlPos)
{
LiteralControl bodyTag = null;
ctlPos = -1;
for (int i = 0; i < parentCtl.Controls.Count; i++)
{
var currentCtl = parentCtl.Controls[i];
if (currentCtl is LiteralControl)
{
int iPos = (currentCtl as LiteralControl).Text.ToLower().IndexOf("</body");
if (iPos > -1)
{
ctlPos = i;
break;
}
}
}
return bodyTag;
}
我寧願與暴露你的頁面可以訪問和操作BodyTag財產基母版類的解決方案。
最好的事情是讓BaseMasterPage自動添加腳本。 – MartinHN 2009-08-19 17:02:48
同意。雖然我以爲你說過你想從你的基礎課上做到這一點。如果一個基礎母版頁面可以爲你工作,甚至更好,它可以找到它自己的身體標籤。 – womp 2009-08-19 17:21:01
好的。我只是想知道如何影響性能。在每個頁面視圖中遍歷控件集合...? – MartinHN 2009-08-19 17:50:54