Avatar billede speedpete Nybegynder
09. oktober 2003 - 14:21 Der er 12 kommentarer og
1 løsning

page inheritance ASP.NET c#

Er der nogen der kan se, hvorfor dette ikke virker:

Disse tre filer ligger i samme dir, og jeg vil have filen test.aspx til at arve fra PageBase. NÅr jeg kører test.aspx fra WebMatrix får jeg beskeden at den ikke kune finde typen SimplePageInheritance.

1. filen test.aspx
===============
<%@ Page language="c#" Codebehind="SimplePageInheritance.cs" AutoEventWireup="false"    Inherits="SimplePageInheritance" %>
<form id="SimplePageInheritance" method="post" runat="server">
    <h1>This is Page 1</h1>
</form>

2. filen SimplePageInheritance.cs
==============================
public class SimplePageInheritance : PageBase
{
    public SimplePageInheritance()
    {
        PageTitle = "Simple Page Inheritance";
    }
}

2. filen PageBase.cs
=================
using System;
using System.Web.UI;
public class PageBase : System.Web.UI.Page
{
    private string _pageTitle;
    public string PageTitle
    {
        get { return _pageTitle; }
        set { _pageTitle = value; }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        // First we will build up the html document,
        // the head section and the body section.
        writer.Write( @"
            <html>
                <head>
                    <title>" + PageTitle + @"</title>
                </head>
                <body>" );

        // Then we allow the base class to render the
        // controls contained in the ASPX file.
        base.Render( writer );

        // Finally we render the final tags to close
        // the document.
        Writer.Write( @"
                </body>
            </html>" );
    }
}
Avatar billede repsak Nybegynder
09. oktober 2003 - 14:43 #1
Problemet er at du ikke kan arve fra en .cs fil
Hvis det du vil skal lykkedes så skal du benytte dll
Avatar billede repsak Nybegynder
09. oktober 2003 - 14:47 #2
er du med på hvordan det skal laves?
Avatar billede speedpete Nybegynder
09. oktober 2003 - 14:50 #3
Tak for svaret; hvordan gør man så det med dll?

Jeg har forøvrigt fundet ovenstående eksempler her:
http://www.codeproject.com/aspnet/page_templates.asp?target=codebehind

Har jeg helt misforstået det han skriver om der , eller hvad?
Avatar billede repsak Nybegynder
09. oktober 2003 - 15:36 #4
Gider ikke læse hele den artikel ;-)
Men du skriver f.eks. din kode som
namespace{
public class A : Page{

}

public class B : A{

}
}

compile: csc test.cs /t:library

i aspx-filen
<%Page .... Inhiert="test.dll"%>

din test.dll til skal ligge i /bin mappen på webserveren
Avatar billede repsak Nybegynder
09. oktober 2003 - 15:41 #5
hov
der skal stå
namespace Test{
...
}

og
<%Page .... Inhiert="Test.B"%> (namespace.Klasse)
Avatar billede jakobandersen Nybegynder
09. oktober 2003 - 16:59 #6
repsak: man kan da sagtens nedarve fra klasser der JIT-compiles f.eks. virker nedenstående fint:

minklasse.aspx
<%@Page Language="C#" Src="minklasse.cs" Inherits="MinKlasse" %>
<script runat="server">
void Page_Load(){
    minTekst.Text = this.MinEgenskab;
}
</script>
<asp:literal runat="server" id="minTekst"/>

minklasse.cs:
using System.Web;
using System.Web.UI;
public class MinKlasse : Page{
    public string MinEgenskab = "Dette er en test";
}
Avatar billede jakobandersen Nybegynder
09. oktober 2003 - 17:00 #7
speedpete: Du kan bare lægge de to klasser PageBase og SimplePageInheritance i samme fil, så burde det virke.
Avatar billede repsak Nybegynder
09. oktober 2003 - 17:25 #8
moonduck -> dit første eksempel virker fint (har jeg påstået at det ikke skulle virke?)

Men hvad hvis du vil arve fra et andet namespace? (som jo oftest ligger i en anden fil)
Avatar billede jakobandersen Nybegynder
09. oktober 2003 - 17:30 #9
repsak: Du sagde "Problemet er at du ikke kan arve fra en .cs fil" jeg går udfra at du mente at man ikke kan arve fra en klasse der ligger i en .cs fil og det kan man altså fra ASP.NET side.
Avatar billede repsak Nybegynder
09. oktober 2003 - 17:42 #10
ok jeg har muligvis formuleret mig forkert ;-)
Min pointe var at du ikke kan arve fra klasse B i Test.cs hvis B arver fra en klasse A (som så arver fra Page)
Enig?
Avatar billede jakobandersen Nybegynder
09. oktober 2003 - 19:37 #11
Nej, ikke helt. Du kan sagtens arve fra en klasse som arver fra en klasse der arver fra Page.

F.eks. kan du fra en ASPX fil sagtens arve fra MinKlasse i nedenstående eksempel:

using System.Web;
using System.Web.UI;
public class MinKlasse : MinKlasse2{
    public string MinEgenskab = "Dette er en test";
}
public class MinKlasse2 : Page{
    public string MinEgenskab2 = "Dette er test2";
}
Avatar billede repsak Nybegynder
09. oktober 2003 - 20:31 #12
Men stadig, så kræver det at de ligger i samme fil, og det er jo ikke altid at det er tilfældet
Avatar billede speedpete Nybegynder
09. oktober 2003 - 22:01 #13
Kasper og måneanden, tak for hjælpen, nu er jeg på sporet med noget der virker
:-)
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
Kurser inden for grundlæggende programmering

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