我有一个Page.aspx。我想注入一个< script>在完成写入输出后,标记到Page.aspx的响应流中。我怎么能在Page的代码隐藏中做这个表单?
如果我这样做:
protected void Page_Load(object sender, EventArgs e)
{
this.ClientScript.RegisterClientScriptInclude
("dfasfds", this.Request.Path.Replace(".aspx", ".js"));
}
然后脚本出现在HTML响应中,但不会出现在最后。
如果我这样做:
protected void Page_Load(object sender, EventArgs e)
{
this.Response.Flush();
this.Response.Write(.../*my javascript*/...);
}
然后< script>标签出现在文档的最初位置,第一行。
答案 0 :(得分:1)
在渲染阶段之前,页面内容不会写入响应流。如果你在Page_Load()中调用Response.Flush(),那么还没有什么可以刷新。
相反,您可以尝试从Page_Unload()事件中调用Response.Write();我非常确定当前响应流仍处于活动状态。
但是,执行此操作的结果是让您的脚本位于标记之后。做一些像使用母版页,并在那里有标记的脚本标记,或者可能使用用户控件插入它更为正确。
答案 1 :(得分:0)
string key = "MyScript";
string src = Request.Path.Replace(".aspx", ".js");
string script = "<script type=\"text/javascript\" src=\"" + src + "\"></script>";
ClientScript.RegisterStartupScript(GetType(), key, script);
答案 2 :(得分:0)
我没试过这个,但我猜你正在.NET生命周期的错误阶段执行写操作。 Page_Load发生在任何内容呈现之前,因此Write()将在页面顶部插入文本。我猜你想在PreRender中这样做:
“在渲染阶段开始之前,使用[PreRender]对页面内容或其控件进行最终更改。”