在主页面显示不同文件夹中的aspx页面的问题

在主页面显示不同文件夹中的aspx页面的问题

问题描述:

我有一个使用一些JQuery脚本的站点母版页面,当我的站点访问我帐户文件夹中的任何内容时,页面加载但不是没有错误消息以及搞砸了母版页。如果我从Account文件夹中取出页面,它工作正常。尝试整天想出来,但无济于事。感谢任何帮助。谢谢!在主页面显示不同文件夹中的aspx页面的问题

+0

定义“错误消息”和“混乱的主页面”。我们需要有关该问题的实际信息。 – David 2011-06-13 13:04:12

+0

点击访问帐户页面中的任何页面时,会弹出一个“网页错误”,并显示错误“您想调试此网页吗?此网页包含可能阻止其显示或正常工作的错误。 : Line:76 Error:'$'is undefined – k80sg 2011-06-13 13:08:51

+0

因为我们看不到你的代码(特别是第76行),所以你仍然需要在这里进行一些基本的调试,这听起来像是一个JavaScript错误。你可以使用像FireBug这样的调试器来浏览JavaScript,看看对象的状态和抛出错误的代码。**编辑:**根据错误信息,听起来好像代码试图使用jQuery库加载之前的jQuery。 – David 2011-06-13 13:11:26

我想有可能是安全问题

首先确保您添加在你的文件的JavaScript文件的正确路径realtive ...

阅读: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> 

这将与您的链接到CSS和JavaScript。确保添加“../”以升级文件夹结构。

+4

这将破坏每个使用主页面的页面该文件夹 – 2011-06-13 13:08:41

+0

外面的页面似乎不受影响。 – k80sg 2011-06-13 14:13:16

我们真的没有足够的信息来提供明确的答案 - 例如,您是指“错误消息”是什么意思?来源是什么?它是如何显示的?最重要的是,它说了什么?如果删除了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> 

嗯,ASP.NET解释来自网页的“观点”相对链接,所以如果该页面是在文件夹中,您的主页面相对链接将不再工作。

这里是我使用,包装在一个自定义的控制你的头内容的解决方案,它会做底垫:

<asp_custom:RebasingContainer ID="mainRebase" runat="server"> 
</asp_custom:RebasingContainer> 

并使用RUNAT =服务器,并使用它们像这样:

<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,你准备好了。例如:

<add assembly="__code" namespace="CustomControls" tagPrefix="asp_custom" /> 

如果您使用AppCode文件夹。

该解决方案将为您提供运行时以及分离的主网页和简单网页的设计时支持。

+1

CSS链接的一个简单的'/'前缀总是从根开始,无需调用.NET来扩展路径。 – 2011-06-13 14:02:03

+0

感谢Mr Disappointment,它是在CSS和JS文件链接导致问题之前忽略/前缀! – k80sg 2011-06-13 14:08:54

+0

@Mr失望,只有在资源位于网站根目录时才有效,这对于大量网站来说并非如此。如果您有localhost/TestSite/Folder1/default.aspx,其中TestSite是您的网站的名称,并且以root身份拥有Master,那么在Folder1中使用该主机的内容将无法工作。 – 2011-06-13 14:38:35

只是使用这个:

把/ js做的伎俩之前。

<script src="/js/jquery.js" type="text/javascript"></script>

从这里引用: Using JQuery in a Subfolder When the MasterPage is in the Root Folder

当你在一些子文件夹的根文件夹的子文件夹和页面的JavaScript或jQuery的,这样做:添加两个环节为每个javascript文件在你的母版:

如:

<script src="Scripts/jquery.js" type="text/javascript"></script> 
<script src="../Scripts/jquery.js" type="text/javascript"></script> 

我如何牛逼的工作原理:在子文件夹将页面引用与../的联系,即

在根文件夹的页面将被引用到的链接没有../,即

提示:如果你能不要让一个文件夹工作或其他,使用:~//,.././一个会引用它为你。