我有一个棘手的场景,我想在某些条件下添加ScriptManager脚本引用,如下所示
<asp:ScriptManagerProxy ID="scriptManagerProxy1" runat="server">
<CompositeScript>
<Scripts>
<asp:ScriptReference path=/...." />
</Scripts>
</CompositeScript>
<asp:ScriptManagerProxy>
我想仅在特定条件下引用此脚本,所以我按以下方式执行
<% if(xyzclass.property)
{ %>
above code
<% } %>
一旦我这样做,我就会收到错误
The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
我用谷歌搜索并试图将'#'添加为&lt;%#但是添加'#'它找不到类(xyzclass),因此得到错误
Expected class, delegate, enum, interface, or struct
我也尝试过这里提到的工作 http://leedumond.com/blog/the-controls-collection-cannot-be-modified-because-the-control-contains-code-blocks/
到目前为止没有运气。如果我采用上面链接中提到的方法,它会说类似
The base class includes the field '', but its type (System.Web.UI.ScriptManagerProxy) is not compatible with the type of control (System.Web.UI.ScriptManager).
伙计们,我需要的只是动态地通过ScriptManager添加脚本。有没有什么方法在实践中也很好。
提前致谢,
的NiMesh
答案 0 :(得分:7)
如果要根据条件添加脚本,可以按可编程添加它们:
ScriptManager mgr = ScriptManager.GetCurrent(this.Page);
if (condition)
mgr.Scripts.Add(new ScriptReference { Path = "~/script.js" });
代码背后的。或者,使用ScriptManagerProxy并在用户控件或页面本身中定义它们。这是添加脚本的好方法,但如果使用复合脚本,它会将这些脚本附加到与ScriptManager相同的复合脚本中。
HTH。