Проблема с рендерингом CSS после выхода из системы

#asp.net #html #css #visual-studio

#asp.net #HTML #css #visual-studio

Вопрос:

У меня есть одна главная страница и три, которые наследуются от нее; мой сайт изменяет основные страницы в зависимости от состояния пользователя (вышел из системы, вошел в систему без прав администратора, вошел в систему с правами администратора), чтобы соответствующим образом изменить боковое меню.

Когда я вхожу в систему, основные страницы normaluser.master и admin.master работают просто отлично.

Когда я выхожу из системы, loggedout.master не может отобразить какой-либо css из таблицы стилей, превращая мое симпатичное боковое меню в список подчеркнутых синих ссылок и удаляя все стили заголовка.

MasterPage.master:

 <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body style="background-color: rgb(231, 231, 255);height:100%;margin:0px;padding:0px">
    <form id="form1" runat="server">
    <div style="background-color:rgb(74, 60, 140);color: rgb(247, 247, 247);height:20%">
        <div style='width:7%;display:inline-block;border:none;padding:0px;padding-left:2px'>
            <img src="Images/globe2.png" style="height:100px;vertical-align:middle"/>
        </div>
        <div style='display:inline-block;vertical-align:middle;'>
            <span style='font-size:36pt;padding-left:10px;font-family:Century,inherit'> Welcome To MeetSmart: </span><span style="font-size:16pt;font-style:italic"> Your smarter meeting solution</span>
        </div>
    </div>
    <div style="height:80%">
        <div style='width:15%;height:100%;display:inline-block;text-align:center;margin-top:10px;padding:0px;'>
            <asp:ContentPlaceHolder id="Menu" runat="server">

            </asp:ContentPlaceHolder>

        </div>
        <div style='display:inline-block;margin:0px;padding-left:10px;padding-top:20px;border:2px solid purple;width:75%;height:100%;vertical-align:top'>
            <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

            </asp:ContentPlaceHolder>
        </div>
    </div>
    </form>
</body>
</html>
  

normaluser.master:

 <%@ Master Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="normaluser.master.cs" Inherits="normaluser" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<link href="StyleSheet.css" rel="stylesheet" type="text/css" />
<title>
<asp:ContentPlaceHolder id="title" runat="server">
</asp:ContentPlaceHolder>
</title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Menu" Runat="Server">
        <div class='menuItem'> <a href="Schedule.aspx" class='menuItem'>My Schedule </a></div>
        <div class='menuItem'> <a href="MyProfile.aspx" class='menuItem'>My Profile </a></div>
        <div class='menuItem'> <a href="DocManagerUser.aspx" class='menuItem'>Document Center </a></div>
        <div class='menuItem'> <a href="Directory.aspx" class='menuItem'>Directory</a></div>
        <div class='menuItem'> <a href="Logout.aspx" class='menuItem'>Log out </a></div>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <asp:ContentPlaceHolder id="mainContent" runat="server">

    </asp:ContentPlaceHolder>
</asp:Content>
  

loggedout.master:

 <%@ Master Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="LoggedOut.master.cs" Inherits="LoggedOut" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    <link runat="server" href="StyleSheet.css" rel="stylesheet" type="text/css" />
    <title>

    <asp:ContentPlaceHolder id="title" runat="server">
    </asp:ContentPlaceHolder>
    </title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Menu" Runat="Server">
    <div class='menuItem'><a href="Login.aspx" class='menuItem'>Log In </a><br /></div>
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:ContentPlaceHolder id="mainContent" runat="server">
    </asp:ContentPlaceHolder>
</asp:Content>
  

С «runat = server» или без него ссылка на таблицу стилей в loggedout ничего не делает; добавление этого было одним из способов, которым я пытался решить проблему. Все основные страницы и таблица стилей находятся в одной папке.

Комментарии:

1. Может ли это быть связано с доступом, который вам нужно изменить в web.config? Что у вышедшего из системы пользователя не будет доступа к файлу loggedout.master или файлу css?

2. Вау. Ага. Я даже не думал об этом, препятствуя доступу к таблице стилей. Отлично сделано.

Ответ №1:

Учитывая ваши описания, похоже, что ваш CSS находится в каталоге, который защищен при аутентификации. Для того, чтобы CSS и скрипты были доступны на страницах входа в систему и других не прошедших проверку подлинности страницах, вам нужно будет сделать их доступными вне аутентификации.

Для этого вы можете добавить эти CSS и скрипты и т.д. В каталог (скажем, общедоступную папку в root) И использовать элемент location в web.config, чтобы предоставить доступ всем к этим directoy. Это не поставило под угрозу вашу безопасность как таковую.

 <configuration>
   <location path="Public">
      <system.web>
         <authorization>
            <allow users="*"/>
         </authorization>
      </system.web>
   </location>
</configuration>