ASP.NET:附加到HTTP响应

时间:2009-11-24 05:52:14

标签: asp.net scripting code-behind

我有一个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>标签出现在文档的最初位置,第一行。

3 个答案:

答案 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]对页面内容或其控件进行最终更改。”

https://msdn.microsoft.com/en-us/library/ms178472.aspx