我有一个使用一些JQuery脚本的站点母版页,当我的站点访问我的帐户文件夹中的任何内容时,页面加载但不是没有错误消息以及混乱的母版页。如果我从Account文件夹中拉出页面,它工作正常。尝试一整天来解决这个问题,但无济于事。感谢给予的任何帮助。谢谢!
答案 0 :(得分:2)
这将与您的CSS和JavaScript链接有关。确保添加“../”以升级文件夹结构中的级别。
答案 1 :(得分:1)
我们实际上没有足够的信息来提供明确的答案 - 例如,“错误信息”是什么意思?来源是什么?怎么显示?而且,最重要的是,它说了什么?如果删除jQuery的使用会发生什么,页面是否按预期显示和运行?
除此之外,为了解释'混乱的MasterPage',我假设您的帐户文件夹通过web.config的authorization
部分进行了限制访问。可以调整此值以允许访问某些资源;在authorization
部分,您可能会遇到以下情况:
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
以上操作将锁定对属于此范围内的所有文件的访问权限。当然,您的登录页面可以访问,但可能不是CSS文件和图像等资源 - 要允许未经过身份验证的用户访问这些页面,您可以配置自定义location
,如下所示:
<location path="pathToResources">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
答案 2 :(得分:1)
我认为可能存在安全问题
首先确保您在文件中添加了javascript文件的正确实际路径...
和
阅读本文:Setting authorization rules for a particular page or folder in web.config
允许匿名用户访问Account.aspx页面。 复制
<configuration>
<location path="~/Users>
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
</configuration>
答案 3 :(得分:1)
嗯,ASP.NET解释了页面“视点”的相对链接,所以如果页面在文件夹中,那么主页面相对链接将不再起作用。
以下是我使用的解决方案,将您的头部内容包装在自定义控件中,该控件将执行rebase:
<asp_custom:RebasingContainer ID="mainRebase" runat="server">
</asp_custom:RebasingContainer>
for和use runat = server并使用它们:
<link rel="stylesheet" type="text/css" href="~/css/reset.css"/>
注意“〜”是ASP.NET“从根目录”路径。
对于控件,请使用:
[ControlBuilder(typeof(RebasingContainerBuilder)),
Designer("System.Web.UI.Design.ControlDesigner, System.Design, " +
"Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
ConstructorNeedsTag(false)]
public class RebasingContainer : HtmlGenericControl
{
public RebasingContainer()
{
}
protected override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
{ /*doesn't render it's own tag*/ }
protected override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
{/*doesn't render it's own tag*/}
}
该控件使用以下控件生成器:
public class RebasingContainerBuilder : ControlBuilder
{
public override bool AllowWhitespaceLiterals()
{
return false;
}
public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs)
{
if (string.Equals(tagName, "link", StringComparison.OrdinalIgnoreCase))
{
return typeof(HtmlLink);
}
if (string.Equals(tagName, "script", StringComparison.OrdinalIgnoreCase)
&& attribs.Contains("src"))
{
//only rebase script tags that have a src attribute!
return typeof(HtmlScript);
}
return null;
}
}
脚本在哪里:
public class HtmlScript : HtmlGenericControl
{
public HtmlScript() : base("script") { }
public HtmlScript(string tag) : base(tag) { }
public string Src
{
get
{
return this.Attributes["src"];
}
set
{
this.Attributes["src"] = value;
}
}
protected override void RenderAttributes(HtmlTextWriter writer)
{
Src = ResolveClientUrl(Src);
base.RenderAttributes(writer);
}
}
在web.config中注册您的客户rebase控件,您就可以开始了。例如:
<add assembly="__code" namespace="CustomControls" tagPrefix="asp_custom" />
如果您使用AppCode文件夹。
此解决方案将为分离的主页和简单网页提供运行时和设计时支持。
答案 4 :(得分:1)
只需使用:
在js之前放/在做伎俩。
<script src="/js/jquery.js" type="text/javascript"></script>
从这里引用: Using JQuery in a Subfolder When the MasterPage is in the Root Folder
答案 5 :(得分:0)
当你在子文件夹中有javascript或jQuery,而在根文件夹中有一些子文件夹中的页面时,请执行以下操作:为主页中的每个javascript文件添加两个链接:
例如:
<script src="Scripts/jquery.js" type="text/javascript"></script>
<script src="../Scripts/jquery.js" type="text/javascript"></script>
工作原理:子文件夹中的页面将引用../
的链接,即
<script src="../Scripts/jquery.js" type="text/javascript"></script>
根文件夹中的页面将引用不带../
的链接,即
<script src="../Scripts/jquery.js" type="text/javascript"></script>
提示:如果您无法使一个文件夹正常工作,请使用:~/
,/
,../
和./
来引用它对你而言。