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

时间:2011-06-13 13:01:36

标签: c# jquery asp.net css master-pages

我有一个使用一些JQuery脚本的站点母版页,当我的站点访问我的帐户文件夹中的任何内容时,页面加载但不是没有错误消息以及混乱的母版页。如果我从Account文件夹中拉出页面,它工作正常。尝试一整天来解决这个问题,但无济于事。感谢给予的任何帮助。谢谢!

6 个答案:

答案 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>

提示:如果您无法使一个文件夹正常工作,请使用:~//.././来引用它对你而言。