【问题标题】:How to programmatically add to a Scripts collection a defined ScriptResourceMapping?如何以编程方式将定义的 ScriptResourceMapping 添加到 Scripts 集合?
【发布时间】:2013-12-22 16:15:54
【问题描述】:

我在我的母版页中定义了这个 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,我缺少什么?

谢谢。

【问题讨论】:

    标签: asp.net scriptmanager


    【解决方案1】:

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

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

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

    我这样做的另一种方式是:

    ScriptManager.RegisterNamedClientScriptResource(Page, "jcrop");
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2015-01-31
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      相关资源
      最近更新 更多