javascript – ASP:在两个ScriptManagers之间切换.或者如何删除脚本引用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – ASP:在两个ScriptManagers之间切换.或者如何删除脚本引用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3827字,纯文字阅读大概需要6分钟。
内容图文
![javascript – ASP:在两个ScriptManagers之间切换.或者如何删除脚本引用](/upload/InfoBanner/zyjiaocheng/786/6b979a8e12964b47918c97a0911c6315.jpg)
大概的概念
我的一般想法是拥有我的网站的移动和桌面版本.用户可以使用页面底部的按钮切换版本.我正在使用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会导致问题.有没有办法使用两个ScriptManagers(某种主题,但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.但是我不能在同一页面上使用两个ScriptManagers,并且没有ScriptManager的Visible属性.
所以这就是我所做的.
首先,因为我需要在两组脚本之间切换,所以我制作了两个独立的ScriptManagerProxy(因为我没有两个ScriptManagers).
对于桌面版:
<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>
最后在master的页面代码隐藏中,我将所需的用户控件添加到占位符:
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切换器.
希望这会对某人有所帮助.
内容总结
以上是互联网集市为您收集整理的javascript – ASP:在两个ScriptManagers之间切换.或者如何删除脚本引用全部内容,希望文章能够帮你解决javascript – ASP:在两个ScriptManagers之间切换.或者如何删除脚本引用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。