ASP:在两个ScriptManager之间切换.或者如何删除脚本引用
ASP: Switching between two ScriptManagers. Or how to remove script reference
总体思路
我的总体想法是拥有我的网站的移动和桌面版本。用户可以通过页面底部的按钮切换版本。我使用ASP主题,这样我就可以根据所需的网站版本轻松切换主题。
问题
切换主题很好,但由于我的主页中的以下ScriptManager
中已经包含了JavaScript
文件:
<asp:ScriptManager runat="server" ID="sm">
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery-2.0.2.min.js" />
<asp:ScriptReference Path="~/Scripts/jQueryMobileBehaviour.js" />
<asp:ScriptReference Path="~/Scripts/Master.js" />
<asp:ScriptReference Path="~/Scripts/jquery.mobile-1.3.1.min.js" />
</Scripts>
</asp:ScriptManager>
当用户切换到桌面版本时,存在由jquery.mobile-1.3.1.min.js
和jQueryMobileBehaviour.js
引起的问题。有没有办法使用两个ScriptManager(某种主题,但用于js文件)?
我尝试过但没有成功
我的第一种方法是从ScriptManager
中删除移动JavaScript
文件,然后手动将它们包含在切换到类似sm.Scripts.Add
的移动版本的按钮的单击事件中。
第二种方法是以编程方式删除类似于sm.Scripts.Remove
的移动JavaScript
文件。
protected void CommandBtn_Click(Object sender, CommandEventArgs e)
{
switch (e.CommandName)
{
case "Desktop":
HttpContext.Current.Response.Cookies["theme"].Value = "Desktop";
//sm.Scripts.Remove(new ScriptReference("~/Scripts/jquery.mobile-1.3.1.min.js"));
break;
case "Mobile":
HttpContext.Current.Response.Cookies["theme"].Value = "Mobile";
//sm.Scripts.Add(new ScriptReference("~/Scripts/jquery-2.0.2.min.js"));
//Response.Redirect(Request.RawUrl);
break;
default:
break;
}
Page.Response.Redirect(Page.Request.Url.ToString(), true);
}
两种方法都不起作用。
总结问题
- 我的代码中是否有错误——假设路径应该是正确的
- 有没有更好的方法,可以让我像切换主题一样切换
JavaScript
文件
我终于想出了一个解决方案。我试着添加了两个<asp:ScriptManager runat="server" ID="sm">
,并根据@Aristos建议的网站版本将其设为sm.Visible = true/false
。然而,我不能在同一页上使用两个ScriptManager
,而且ScriptManager
也没有Visible属性。
这就是我所做的。
首先,由于我需要在两组脚本之间切换,我制作了两个单独的ScriptManagerProxy
(因为我不能有两个ScriptManager
)。
对于桌面版:
<asp:ScriptManagerProxy runat="server" ID="smDesktop">
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery-2.0.2.min.js" />
<asp:ScriptReference Path="~/Scripts/Modernizr.js" />
<asp:ScriptReference Path="~/Scripts/Modernizr_full.js" />
<asp:ScriptReference Path="~/Scripts/Master.js" />
</Scripts>
</asp:ScriptManagerProxy>
对于移动版:
<asp:ScriptManagerProxy runat="server" ID="smMobile">
<Scripts>
<asp:ScriptReference Path="~/Scripts/jquery-2.0.2.min.js" />
<asp:ScriptReference Path="~/Scripts/jQueryMobileBehaviour.js" />
<asp:ScriptReference Path="~/Scripts/Modernizr.js" />
<asp:ScriptReference Path="~/Scripts/Modernizr_full.js" />
<asp:ScriptReference Path="~/Scripts/Master.js" />
<asp:ScriptReference Path="~/Scripts/jquery.mobile-1.3.1.min.js" />
</Scripts>
</asp:ScriptManagerProxy>
重要部分从这里开始
然后我把它们放在两个独立的用户控件中,我将它们注册到主页:
<%@ Register Src="~/UserControl/ScriptManagerDesktop.ascx" TagName="smDesktop" TagPrefix="uc" %>
<%@ Register Src="~/UserControl/ScriptManagerMobile.ascx"TagName="smMobile" TagPrefix="uc" %>
然后,在母版页正文中,我插入了一个ContentPlaceHolder,根据需要的版本,我将使用它插入一个用户控件。
<asp:ScriptManager runat="server" ID="sm"></asp:ScriptManager>
<asp:ContentPlaceHolder ID="cphScripts" runat="server">
</asp:ContentPlaceHolder>
最后,在母版页代码隐藏中,我将所需的用户控件添加到占位符中:
if (HttpContext.Current.Request.Cookies["theme"] != null)
{
switch (HttpContext.Current.Request.Cookies["theme"].Value)
{
case "Desktop":
cphScripts.Controls.Add(Page.LoadControl("~/UserControl/ScriptManagerDesktop.ascx"));
break;
case "Mobile":
cphScripts.Controls.Add(Page.LoadControl("~/UserControl/ScriptManagerMobile.ascx"));
break;
default:
cphScripts.Controls.Add(Page.LoadControl("~/UserControl/ScriptManagerDesktop.ascx"));
break;
}
}
瞧,我已经准备好了你的ScriptManager
切换器。
希望这能帮助到别人。
- 使用php或javascript从facebook相册URL中删除多余的部分
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何删除多行HTML排列中的空白
- 如何从rails中的代码中删除新行( )
- 删除对HTML元素的拖动
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 按顺序添加和删除类
- iframe正在添加标签,需要删除它们
- 如何在HTML输入字段中添加不可删除的后缀
- addData()从最新图表中删除.js 2.1.3-怎么了
- 如何覆盖锚点元素's href目标,并在我点击转到目标javascript时删除其他错误
- 如何删除除冒号、数字和'上午'或者'下午'
- 复杂的JavaScript代码,我可以删除它吗?或者它的作用
- 滚动条从何而来,如何删除它
- Javascript错误:BOF或EOF为True,或者当前记录已被删除
- ASP:在两个ScriptManager之间切换.或者如何删除脚本引用
- FullCalendar删除所有事件源或事件,或者按事件.Id或event.source
- 如何在PHP MySQL或javascript中增加/删除产品数量.或者如何将产品的数量值与复选框一起插入
- 如何删除所有jQuery事件(或者简单地不重新初始化两次)
- 删除所有标题零,除非它是","或“!”或者在","后面加零或“管理者”