Yoo!
Har en MasterPagesida (Site.master) + en childsida (Default.aspx) (kan ev. tillkomma flera childsidor sen).
Har också två querystringparametrar: MenuID och ContentID.
Jag har fastnat lite i tänket här!
Var hämtar jag ner dessa två parametrar?
1. På mastersidan och sätter dessa genom två publika properties som sedan defaultsida kan hämta.
2. På mastersidan och skickar dem (i ex. page_init) till defaultsidan, som då har två publika properties som kan ta emot värdena.
3. På defaultsidan.
Nackdelen med nr 3 är ju om det tillkommer flera childsidor så får jag hämta parametrarna på dessa sidor också.
Så om det är 1 eller 2 som gäller:
Ska mastersidan skicka parametrarna eller ska defaultsidan hämta?
Finns det andra lösningar?
erkaMedlem sedan dec. 19996 522 inlägg Gör en basklass för dina sidor och en för dina usercontrols. Ha två property i din sidbasklass MenuID och ContentId. Implementera dem i din basklass också genom att casta aktuell Page till din bassideklass, och skicka vidare dem användaren.
erkaMedlem sedan dec. 19996 522 inlägg Red. Toklade childsidor som user controls, men du förstår vad jag menar. Jag är bara lite för bakis för att läsa en text korrekt. Hämta dem
erka skrev:
casta aktuell Page till din bassideklass, och skicka vidare dem användaren.
Jag är inte riktigt med i svängarna där, hur menar du?
Så här ser min basklass ut nu:
using System;
using System.Web;
using System.Web.UI;
using System.Configuration;
using SWH.Entities;
/// <summary>
/// Basklass för aspx-sidor
/// </summary>
public abstract class BasePage : System.Web.UI.Page
{
private int _menuID = 0;
private int _contentID = 0;
public int MenuID
{
get { return _menuID; }
set { _menuID = value; }
}
public int ContentID
{
get { return _contentID; }
set { _contentID = value; }
}
}
erkaMedlem sedan dec. 19996 522 inlägg Jag var nog lite för bakis för läsa ditt inlägg över huvud taget, samt för att skriva ser jag nu :) I min värld så har det inget med masterpagen att göra direkt, du kanske kommer ha flera sorters masterpage och om du då inte gör en basklass för masterpages, så är det väll utmärkt att ha dem i BasePage och sätta dem där. KISS, keep it simple. Om du skickar in dem får du ju en stark koppling mellan dem, i mitt tycke mycket bättre att efterfråga i detta fall. Jag är inte säker på att jag förstod din fråga riktigt, vad exakt menar du?
erkaMedlem sedan dec. 19996 522 inlägg BTW, varför har du din BasePage som abstract?
Hehe, ja det är inte roligt att vara bakis! :)
Det jag försöker åstakomma är ett ställe där jag hämtar ner querysträngen som jag sedan kan använda i div. metoder, usercontrols etc.
I dagsläget har jag denna kod i min masterpage.
Säkert helt galen placering men så är det i alla fall! ;)
Masterpage:
private int _contentID = 0;
public int ContentID
{
get { return _contentID; }
set { _contentID = value; }
}
protected void Page_Init(object sender, EventArgs e)
{
if (Request.QueryString["ContentID"] != null)
{
if (Int32.TryParse(Request.QueryString["ContentID"].ToString(), out _contentID))
{
if (_contentID > 0)
{
//Some stuff
}
}
}
}
Sen för att hämta ContentID har jag på min default.aspx gjort så här:
int _contentID = Master.ContentID;
Men det känns som om det är en dålig lösning!
MenuID samt ContentID används på väldigt många ställen.
Och för att då slippa kolla om querystringen är null och om den kan parsas överallt så vill jag bara göra det en gång, nånstans. Frågan är var?
erka skrev:
BTW, varför har du din BasePage som abstract?
Tja, fått för mig att man gör så! :)
För jag behöver väl inte kunna använda basklassen på annat sätt än ärvning, eller?
erkaMedlem sedan dec. 19996 522 inlägg
Och för att då slippa kolla om querystringen är null och om den kan parsas överallt så vill jag bara göra det en gång, nånstans. Frågan är var?
Det fungerar ju så om du i din bassida, läser querystringen i Init, sätter dina värden, och sedan når dem via Properties i kontroller,sidor what ever som behöver det. Som du har gjort nu behöver ju bara din BasePage ha en property som heter Master (Ifall du vill slippa casta överallt) som returnerar instansen så du kan nå dens ContentId etcetera. Det är ju helt meningslöst och lite dumt att ha medlemsvariabler dels i din master, din basepage osv. Personligen hade jag nog flyttat in det i din BasePage om du inte behöver dina IDs i för att initialisera din MasterPage
Så här har jag gjort nu:
using System;
using System.Web;
using System.Web.UI;
using System.Configuration;
/// <summary>
/// Basklass för aspx-sidor
/// </summary>
public abstract class BasePage : System.Web.UI.Page
{
private int _menuID = 0;
private int _contentID = 0;
public int MenuID
{
get { return _menuID; }
set { _menuID = value; }
}
public int ContentID
{
get { return _contentID; }
set { _contentID = value; }
}
public BasePage()
{
//Sätter ContentID
if (HttpContext.Current.Request.QueryString["ContentID"] != null)
{
if (!Int32.TryParse(HttpContext.Current.Request.QueryString["ContentID"].ToString(), out _contentID))
{
_contentID = 0;
}
}
//Sätter MenuID
if (HttpContext.Current.Request.QueryString["MenuID"] != null)
{
if (!Int32.TryParse(HttpContext.Current.Request.QueryString["MenuID"].ToString(), out _menuID))
{
_menuID = 0;
}
}
}
}
Och sen ärver jag denna på mina aspxsidor.
Var det typ så du menade?
Det känns i alla fall som en bra mycket bättre lösning än den jag hade! :)
Och nej, mastern behöver inte id:na.
erkaMedlem sedan dec. 19996 522 inlägg Japp exakt så, sen kanske du gör en BaseUserControl som i sin tur returnerar infon från Page (Med cast till BasePage), om du behöver infon om meny och content i dina user controls.