Проблемы с отображением страниц aspx в другой папке, чем на главной странице - PullRequest
1 голос
/ 13 июня 2011

У меня есть главная страница сайта, которая использует некоторые сценарии JQuery, когда мой сайт получает доступ ко всему, что находится в папке «Моя учетная запись», страница загружается, но не без сообщения об ошибке, а также как испорченная главная страница. Это работает нормально, если я вытащу страницу из папки учетной записи. Пытаться весь день, чтобы понять это, но безрезультатно. Ценю любую помощь, оказанную. Спасибо!

Ответы [ 6 ]

2 голосов
/ 13 июня 2011

Это будет связано с вашими ссылками на CSS и JavaScript. Убедитесь, что вы добавили "../", чтобы подняться на уровень структуры папок.

1 голос
/ 26 марта 2013

просто используйте это:

, поставив / перед js добейтесь цели.

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

Ссылка отсюда: Использование JQuery во вложенной папке, когдаMasterPage находится в корневой папке

1 голос
/ 13 июня 2011

Хорошо, ASP.NET интерпретирует относительные ссылки с "точки зрения" страницы, поэтому, если страница находится в папке, относительные ссылки вашей главной страницы больше не будут работать.

Вот решение, которое яиспользуйте, оберните содержимое своей головы в пользовательский элемент управления, который выполнит ребазирование:

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

для и используйте 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);
    }
}

Зарегистрируйте свой элемент управления rebase клиента в web.config, и вы готовы к работе.Например:

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

, если вы используете папку AppCode.

Это решение предоставит вам время выполнения, а также поддержку времени разработки для отдельных основных и простых веб-страниц.

1 голос
/ 13 июня 2011

Я думаю, что может быть проблема безопасности

Сначала убедитесь, что вы добавили правильный реальный путь к файлу javascript в вашем файле ...

и

Прочтите это: Настройка правил авторизации для определенной страницы или папки в web.config

позволяет анонимному пользователю получить доступ к странице Account.aspx.Копия

<configuration>
   <location path="~/Users>
      <system.web>
         <authorization>
            <allow users="?"/>
         </authorization>
      </system.web>
   </location>
</configuration>
1 голос
/ 13 июня 2011

У нас нет достаточной информации, чтобы дать здесь точный ответ - например, что вы подразумеваете под «сообщением об ошибке»? Каков источник? Как это отображается? и, самое главное, что это говорит? Что произойдет, если вы прекратите использование jQuery, страница будет отображаться и функционировать должным образом?

Кроме того, для учета «испорченной MasterPage» я бы предположил, что ваша папка «Учетная запись» имеет ограниченный доступ через раздел authorization web.config. Это можно настроить, чтобы разрешить доступ к определенным ресурсам; в разделе authorization у вас может быть что-то вроде этого:

<authorization>
    <deny users="?"/>
    <allow users="*"/>
</authorization>

Выше будет заблокирован доступ ко всем файлам, которые находятся в пределах пути, который находится в пределах видимости. Естественно, ваша страница входа будет доступна, но, возможно, не такие ресурсы, как CSS-файлы и изображения - чтобы разрешить доступ к ним пользователям, еще не прошедшим проверку подлинности, вы можете настроить пользовательский location, например:

<location path="pathToResources">
    <system.web>
        <authorization>
            <allow users="?"/>
        </authorization>
    </system.web>
</location>
0 голосов
/ 19 апреля 2013

Если у вас есть 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>

Подсказка: Если вы не можете заставить работать одну или другую папку, поиграйте с: ~/, /, ../, и ./, одна из которых поможет вам.

...