Avatar billede tniels Nybegynder
17. august 2004 - 14:53 Der er 8 kommentarer og
1 løsning

Hvordan gør man opbytte en side

Jeg er igang med at skifte fra ASP til ASP.NET. Jeg prøver at finde den bedste måde, jeg kan opbygge mine sider, så jeg kan genbruge så meget så muligt på de forskellige sider.

Jeg har i første omgang opbygget sider nogenlunde sådan her:

1.aspx
----------
<%@ Page Language="VB" Debug="True" Explicit="True" AutoEventWireup="False" %>
<%@ Register TagPrefix="aspHead" TagName="Head" Src="1.ascx" %>
<%@ Register TagPrefix="aspBody" TagName="Body" Src="2.ascx" %>
<html>
<head>
<aspHead:Head runat="server" />
</head>
<body>
<aspBody:Body runat="server" />
</body>
</html>
----------

1.aspx.vb
----------
Imports System.Web.UI.UserControl
Public Class cPageInfo : Inherits System.Web.UI.UserControl
    Public title As String
    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'her skal "title" hentes med et databaseopslag
        title = "Testside"
    End Sub
End Class
----------

1.ascx
----------
<%@ Control Language="VB" Debug="True" Explicit="True" Src="1.aspx.vb" Inherits="cPageInfo" %>
<title><%=title%></title>
----------

2.ascx
----------
<%@ Control Language="VB" Debug="True" Explicit="True" Src="1.aspx.vb" Inherits="cPageInfo" %>
<%=title%>
----------

Her har jeg prøvet at genbruge variablen "title" både i head og i body. Problemet er bare, at hvis jeg gør det på denne måde, vil system lave to databaseopslag for at finde siden "title".
Hvad kan jeg gøre, for at undgå det, og kun lave et databaseoplag?
Er der nogen, der har et bedre foreslag til, hvordan jeg hellere skal opbygge siden.
Avatar billede basementjack Nybegynder
17. august 2004 - 20:28 #1
Hvis du er mere van til det, eller mener det er lettere, så man kan også inkludere filer..

  <!-- #include virtual="myInc.inc" -->
Avatar billede tniels Nybegynder
17. august 2004 - 20:46 #2
Ja, jeg plejer at bruge "include file", og det virker også perfekt. Men det vil jeg gerne udover. Jeg vil gerne lære at gøre det på denne måde.
Nogle idéer? Det kan ikke passe, at jeg er den første, der har dette problem - det virker ret grundlæggende.
Avatar billede snepnet Nybegynder
17. august 2004 - 20:52 #3
hvis det "bare" ønsker at få adgang til en given værdi kan du f.eks. angive det i dine contexitems... Altså hvis du f.eks. skriver følgende i request_begin :

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    Context.Items["title"] = GetTitle(Request.QueryString["id"]);
}

private string GetTitle(string id)
{
    switch(id)
    {
        case "1" :
            return "hej";
        case "2" :
            return "med";
        case "3" :
            return "dig";
        default :
            return "ukendt";

    }
}

Så vil du alle andre steder i applikationen kunne hente det med :
string title = Context.Items["title"];

Hvis du skriver i nogle underliggende klasser, usercontrols eller lignenden kan du hente det med :

HttpContext.Current.Items["title"]

Mvh
Avatar billede snepnet Nybegynder
17. august 2004 - 20:59 #4
Men der er mange måder at gøre det på.... Du kan også lave dig en baseklasse for dine formklasser, og så lade den hente det der nu skal hentes, og populere det i properties ell.
Avatar billede tniels Nybegynder
17. august 2004 - 21:34 #5
snepnet > kan du prøve at komme med et eksempel på det?
Avatar billede snepnet Nybegynder
17. august 2004 - 21:43 #6
jada - koden står nu bare som visual studio plejer at lave det.


// her en base
public class SomePageBase : Page
{
    private string _pageTitle;

    // her så den property du kan bruge i dine speciealiserede klasser
    public string PageTitle
    {
        get{return _pageTitle;}
    }

    protected override void OnInit(EventArgs e)
    {
        // her kan du så initialisere en variabel med et eller andet
        _pageTitle = "Godmorgen"; // skulle så nok være noget med at hente i db
        base.OnInit (e);
    }
}

// her bare en eller anden side
public class tniels : SomePageBase
{
    private void Page_Load(object sender, System.EventArgs e)
    {
        // her høster du bare fra den property der ligger på basen
        Response.Write(PageTitle);
    }

    override protected void OnInit(EventArgs e)
    {
        InitializeComponent();
        base.OnInit(e);
    }
   
    private void InitializeComponent()
    {   
        this.Load += new System.EventHandler(this.Page_Load);
    }
}

Mvh
Avatar billede snepnet Nybegynder
17. august 2004 - 21:45 #7
hov - du bruger vist VB (ikke min stærke side)... Du kan oversætte her :
http://www.developerfusion.com/utilities/convertcsharptovb.aspx
Avatar billede tniels Nybegynder
18. august 2004 - 10:19 #8
Jeg kan nu godt læse C#, men det er da et smart lille stykke værktøj.

Nu tror jeg nok, at jeg er kommet et stykke videre. Tak for hjælpen!
Hvis du vil ha point, kan du bare lige smide et svar.
Avatar billede snepnet Nybegynder
18. august 2004 - 10:20 #9
ok :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester