如何以编程方式向Scripts集合添加已定义的ScriptResourceMapping?

时间:2013-12-22 16:15:55

标签: asp.net scriptmanager

我在我的母版页中定义了这个ScriptManager:

    <asp:ScriptManager runat="server">
        <Scripts>
            <asp:ScriptReference Name="jquery" />
            <asp:ScriptReference Name="bootstrap" />
            <asp:ScriptReference Name="respond" />
        </Scripts>
    </asp:ScriptManager>

我也在BundleConfig.cs中定义了ScriptResourceMapping:

        ScriptManager.ScriptResourceMapping.AddDefinition("respond",
            new ScriptResourceDefinition {
                Path = "~/Scripts/respond.min.js",
                DebugPath = "~/Scripts/respond.js"
            });

        ScriptManager.ScriptResourceMapping.AddDefinition("jcrop",
            new ScriptResourceDefinition {
                Path = "~/Scripts/jquery.jcrop.min.js",
                DebugPath = "~/Scripts/jquery.jcrop.js"
            });

我可以看到“响应”映射已正确加载。

现在我需要仅在特定页面上加载“jcrop”映射,因此,我添加了该页面的页面加载事件:

        ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("jcrop"));
        ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("~/Scripts/picturecrop.js"));

我可以看到picturecrop.js脚本已加载,但jcrop映射只是被忽略了。 没有错误也没有效果。如果我将映射更改为显式路径,它可以正常工作,但我无法利用Path / DebugPath的区别。

我缺少能够以编程方式使用我定义的ScriptResourceMapping吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

我做了两种似乎都有效的方法:

ScriptManager.GetCurrent(Page).Scripts.Add(new ScriptReference("jcrop", null));

我认为这个有用,因为如果你看两个构造函数ScriptReference,那么单参数构造函数的参数名为path,而在双参数构造函数中它们是nameassembly。所以我认为你的问题是它期待一个完整的路径而你只是给它一个名字。

我做的另一种方式是:

ScriptManager.RegisterNamedClientScriptResource(Page, "jcrop");

这似乎也很好用。我希望这有帮助!