Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Программная работа с темами


Автор: thomas 18.9.2008, 21:08
Привествую всех.

Вот возник вопрос:
имеем сайтик созданный с использованием ASP.NET, в проекте имеются несколько тем.
Так вот, как сделать так что бы посетитель сайта мог сам выбирать себе тему?

Обьясните на пальцах, как сиё делаеться.

Заранее спасибо.


ЗЫ Вот этот кусок лекции 
Цитата

Программная работа с темами

Как и шаблоны, темы можно назначать не позднее события PreInit:

protected void Page_PreInit(object sender, System.EventArgs e)
{
      Page.Theme = Request.QueryString["ThemeChange"];
}


от http://www.intuit.ru/department/se/aspdotnet/13/4.html ничего толком не объясняет. 

Автор: Idsa 19.9.2008, 05:44
В Page.Theme нужно задать строку, совпадающую с именем одной из тем из App_Themes. А уж как ее передавать: через строку запроса (как в примере), через ViewState или еще как - выбор за Вами.

Автор: thomas 19.9.2008, 13:41
Idsa, 
Приветствую.
А поподробнее, на пальцах.
А то туп с годами становлюсь, на лету не подхватываю.

ЗЫ Сейчас тему задаю в файле web.config вписывая атрибут в <pages 

Автор: Idsa 19.9.2008, 14:22
Цитата(thomas @  19.9.2008,  17:41 Найти цитируемый пост)
ЗЫ Сейчас тему задаю в файле web.config вписывая атрибут в <pages 

Сейчас Вы указываете в pages theme="theme1", где theme1 - подкаталог в каталоге App_Themes в Вашем проекте. Допустим в App_Themes есть еще один подкаталог - theme2. Тогда можно указать theme="theme2". Аналогично присвоение происходит и в PreInit:
Код

Page.Theme = "theme1";
или
Page.Theme = "theme2";

Автор: wotker 19.9.2008, 16:41
Цитата

через строку запроса (как в примере), через ViewState или еще как - выбор за Вами.

на мой взгляд передавать информацию о глабольных настройках в viewstate (или строке запроса) для реальных сайтов не годится. Лучше в сессии наверное.

Автор: Idsa 19.9.2008, 17:00
Цитата(wotker @  19.9.2008,  20:41 Найти цитируемый пост)
на мой взгляд передавать информацию о глабольных настройках в viewstate (или строке запроса) для реальных сайтов не годится. Лучше в сессии наверное. 

Это я так, для примера. Вообще лучше всего хранить такие настройки в профиле (в стандартном либо в самописном).

Автор: thomas 21.9.2008, 11:45
wotker, 
Idsa, 
спасибо за отклики конечно.

Но все же, обьясните конкретно "на пальцах", 
что, где и как прописывать чтобы юзверь мог менять тему сайта, например нажав на кнопочку.

Заранее спасибо от "туповатого" студента  smile 

Автор: Idsa 21.9.2008, 11:52
Приведу простой пример.
Создаем WebApplication, добавляем в разметку DropDownList, а в codebehind - обработчик Page_PreInit:
Код

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication14._Default" %>

<!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 runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:DropDownList ID="ThemesDropDownList" runat="server">
        <asp:ListItem>Theme1</asp:ListItem>
        <asp:ListItem>Theme2</asp:ListItem>
      </asp:DropDownList>
    </div>
    </form>
</body>
</html>

Код

public partial class _Default : System.Web.UI.Page
  {
    protected void Page_PreInit(object sender, EventArgs e)
    {
      this.Theme = this.ThemesDropDownList.SelectedValue;
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }
  }

Естественно, в папке App_Themes должны быть подпапки, соответствующие названиям тем, хранящимся в списке ThemesDropDownList.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)