2013-12-22 35 views
3

我有这样的ScriptManager在我的母版页定义:如何以编程方式向脚本集合中添加已定义的ScriptResourceMapping?

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

我也有这个ScriptResourceMapping在我BundleConfig.cs定义:

 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”映射只在特定页面上加载,从而,IL该页面我添加的页面加载事件:

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

我可以看到picturecrop.js脚本加载,但jcrop映射简单地被忽略。 没有错误也没有影响。如果我将映射更改为显式路径,它可以正常工作,但我无法利用Path/DebugPath区分。

我错过了什么能够以编程方式使用我定义的ScriptResourceMapping?

谢谢。

回答

3

我没有这两种方式这两者似乎工作:

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

这一次我觉得作品,因为如果你看一下两个构造来ScriptReference的一个参数的构造函数有一个参数命名path并在两参数构造函数,它们是nameassembly。所以我认为你的问题在于它期待着一条完整的道路,而你只是给它一个名字。

的另一种方式我做它是:

ScriptManager.RegisterNamedClientScriptResource(Page, "jcrop"); 

这似乎也工作得很好。我希望这有帮助!

相关问题