我在这里有一个解决方案,但它不是我会强烈建议的。它有着与开发人员忘记放入脚本标记块或让他们记住放置“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