Nastavením ASP.NET vzorovou stránku za běhu

hlasů
8

Jsem pracující na místě, které musí být schopen podporovat dva nebo více pohledů, Měnitelný za běhu. Doufal jsem, že bude schopen zvládnout změnu s vypínačem CSS, ale vypadá to, že budu muset použít jinou Masterpage pro každou konstrukci.

Takže, co je nejlepší způsob, jak nastavit Masterpage za běhu? Page.MasterPageFile lze nastavit pouze v případě, Page.OnPreInit. Vypadá to, že řešení je, aby všechny mé stránky dědí ze společného základu, který zpracovává události PreInit, nebo použít modulu HTTP, která dělá to.

Nějaká rada?

Položena 18/08/2008 v 22:17
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
6

Udělal jsem to jednou, udělal jsem přesně to, co bylo popsáno (Made všechny stránky dědí z vlastní stránky s událostí OnPreInit). Také jsem měl zvyk Application_PreRequestHandlerExecute v mých Global.asax.cs pro stanovení Page.StyleSheetTheme za to změny image / CSS, které nevyžadovaly jinou vzorovou stránku.

Odpovězeno 18/08/2008 v 22:22
zdroj uživatelem

hlasů
2

Cítím tvou bolest. Hledala jsem asi hodinu (ne-li více) k problému s tím, ale bez úspěchu. To není jen střih a suché odpověď říkat „jen volat z PreInit na každé straně“, když máte stovky stránek. Ale pak jsem si uvědomil, že jsem trávil víc času hledala řešení, než by trvalo jen to na každé straně.

Nicméně jsem chtěl nastavit MasterPageFile založen na pozemku profilu, takže by to bylo asi 5 řádků kódu každé stránce, je udržovatelnost noční můra. A tak jako tak, „neopakovat sebe“, ne?

Tak jsem vytvořil metodu rozšíření v modulu ve složce App_Code, aby se to snadněji a udržovatelné.

Public Module WebFunctions

    <System.Runtime.CompilerServices.Extension()> _
    Public Sub SetMaster(ByVal page As Page)

        Dim pb As ProfileCommon = DirectCast(HttpContext.Current.Profile, ProfileCommon)

        If pb IsNot Nothing Then
            page.MasterPageFile = pb.MasterPage
        End If

    End Sub

End Module

A poté na každé stránce je PreInit, jen jsem volat toto:

Protected Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
        Me.SetMaster()
    End Sub
Odpovězeno 23/02/2009 v 18:24
zdroj uživatelem

hlasů
2

Spíše než dvě různé stránky předlohy, jak o tom mít jeden pán, který se dynamicky načte různých uživatelských ovládacích prvků a obsahu HTML literály?

Odpovězeno 18/08/2008 v 22:19
zdroj uživatelem

hlasů
1

Je to docela snadné zvládnout PreInit a vložte jeden řádek kódu potřebný k načtení správné vzorovou stránku.

this.Page.MasterPageFile = "~/default.master";

Při absenci nějakého přesvědčivý důvod nejít touto cestou, to je to, co bych dělal, bez ohledu na to, kde jste zvládnout PreInit.

Odpovězeno 18/08/2008 v 22:24
zdroj uživatelem

hlasů
0

Zdědí vše, co stránek ze základní třídy, jako

public class PageBase : System.Web.UI.Page
{
    public PageBase()
    {
        this.PreInit += new EventHandler(PageBase_PreInit);
    }
    void PageBase_PreInit(object sender, EventArgs e)
    {
        this.MasterPageFile = "~/MyMasterPage.Master";
    }
}
Odpovězeno 29/08/2013 v 14:23
zdroj uživatelem

hlasů
0

Jsem zvědavá, co rozhoduje, jak by měla stránka vypadat? Je to uživatel kliknutím na tlačítko změnit téma? Je to založeno na adresu, která byla použita, aby se na stránky?

Kód za je podporována v vzorových stránkách, takže si mohl dát nějakou logiku v jednu vzorovou stránku rozhodnout, jaký by měl být zobrazen.

Viděl jsem několik míst nastavit cookie na základě uživatel klikne (změnit velikost písma nebo šířku stránky), a potom mají různé soubory CSS použita v závislosti na hodnotě těchto sušenek. Je-li přítomen žádný cookie, zobrazí se výchozí vzhled a pocit.

UPRAVIT:

Dalším sem si myslel, pokud jste prostě snaží přejít z CSS je nastavit svůj styl značky běžet na serveru a přiřadit vlastnosti, které jí při běhu. Opět by to vyžadovalo použití jedné vzorové stránky, a uvedení kód kódem na pozadí na hlavní stránce, pravděpodobně v obsluze události PreInit.

Vzhledem k tomu, já jsem nikdy realizován toto řešení Nejsem si jistý, jestli celý <head> tag musí běžet na serveru, nebo ne.


<html>
<head id="Head" runat="server">
<style id="StylePlaceholder" runat="server" type="text/css"></style>
</head>
Odpovězeno 18/08/2008 v 22:46
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more