将ScriptReference添加到动态脚本

时间:2011-06-29 08:30:55

标签: c# javascript .net asp.net scriptmanager

我想从Javascript中提供的数据库中制作文本。我已经制作了输出Javascript代码的Texts.aspx,我想要包含它。包含必须以正确的顺序完成,因为Texts.aspx使用其他Javascript文件中的函数。我尝试将ScriptReference添加到此aspx文件中,但这会破坏一些事情。以下代码在ScriptResource.axd上给出了404错误。

 <asp:ScriptManager runat="server" EnableScriptGlobalization="true">
     <CompositeScript>
         <Scripts>
             <asp:ScriptReference Path="~/Scripts/textFunctions.js" />
             <asp:ScriptReference Path="~/Scripts/Texts.aspx" />
             <asp:ScriptReference Path="~/Scripts/useTexts.js" />
        </Scripts>
    </CompositeScript>
</asp:ScriptManager>

如何包含动态生成的Javascript文件?

2 个答案:

答案 0 :(得分:1)

请使用IHttpHandler而不是标准的aspx页面,因为它是您真正想要的。 如果你必须使用aspx文件,请确保你只返回那里的javascript内容,并且你也应该为javascripts设置内容类型。

例如:

public class Texts : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/javascript";
        context.Response.Write("var texts = { Some: 'some text here' }");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

比在master或aspx中

<asp:ScriptManager runat="server" ID="sm">
    <Scripts>
        <asp:ScriptReference Path="/Scripts/jquery-1.4.1.js" />
        <asp:ScriptReference Path="/texts.ashx" />
    </Scripts>
</asp:ScriptManager>

最后你可以确认它有效(你也会在firebug中看到你的ashx文件被正确识别为javascript)

<script type="text/javascript" language="javascript">
    alert(texts.Some);
</script>

答案 1 :(得分:0)

不,这是不可能的。 ScriptReference引用一组脚本然后从磁盘读取,因此无法对HTTP位置进行ScriptReference。