Avatar billede tomniels Nybegynder
11. september 2002 - 14:06 Der er 21 kommentarer og
5 løsninger

Referance mellem .cs og .aspx fil

Jeg skal have oprettet en forbindelse (reference) mellem en .cs fil og en .aspx i forbindelse med at jeg skal anvende Response.ContentType i .cs filen. ER der nogen der kan vise mig hvordan denne forbindelse oprettes?????

Meget gerne med kode eksempler i C#.
Avatar billede simon.ulsnes Nybegynder
11. september 2002 - 14:43 #1
I starten af din ASP.NET-side:
<%@ Page Language="C#" Src="dincsfil.cs" Inherits="DinPageClass" %>

I din CS-fil:
using System; osv...

class DinPageClass : Page
{
    DinPageClass()
    {
        this.Response.ContentType...
    }
}

// Simon
// This sentence no verb.
Avatar billede z42cool Nybegynder
11. september 2002 - 15:23 #2
I forhold til din tidligere post vedr. Response.Write, så skal du være opmærksom på, at der til debugging er kommet en ny funktion der hedder Trace.Write som er væsentligt mere anvendelig.
Når du anvender Trace.Write skrives outputtet til din trace kø (hvis trace="true" i page direktivet. Samtidigt kan du slå alt tracing fra, blot ved at angive trace="false" i page direktivet!
Avatar billede tomniels Nybegynder
11. september 2002 - 15:24 #3
Det virker ikke helt efter hensigten, jeg bliver ved med at få en fejl når jeg kører min .aspx fil:

CS1595: 'PCV.HistogramSpike' is defined in multiple places; using definition from 'C:\WINNT\Microsoft.NET\Framework\v1.0.3705\Temporary ASP.NET Files\pcv\129aba3b\c791b2e7\rpdbmbt1.dll'

PCV er namespace, og HistogramSpike er min .cs fil.
Har du nogen ide til hvad det kan skyldes??
Avatar billede z42cool Nybegynder
11. september 2002 - 15:25 #4
Vær også opmærksom på at du får bedre performance ved selv at kompilere din .cs fil.

1) Kompiler .cs files med: csc /target:library mysource.cs
2) Smid din dll (mysource.dll) i /bin biblioteket så asp.net kan finde den
3) Undlad src="mysource.cs" i dit page direktiv:
Avatar billede z42cool Nybegynder
11. september 2002 - 15:27 #5
Ups.... kom til at ramme udfør knappen, her er page direktivet:

<%@ Page Language="C#" Inherits="DinPageKlasse" %>

Mht. "defined in multiple spaces", så skyldes det at klassen HistogramSpike er defineret mere end et sted. Fejlmeddelelser som denne undgås ved at prekompilere din .cs fil, da du så få rfejlmeddelelsen inden deployment!
Avatar billede z42cool Nybegynder
11. september 2002 - 15:27 #6
Prøv at kompilere din .cs fil med csc kompileren, så får du linieangivelse af hvor den 2. definition af HistogramSpike er!
Avatar billede tomniels Nybegynder
11. september 2002 - 15:34 #7
Jeg anvender allerede csc, og jeg får ingen fejl når jeg Kompilere cs filen. Når jeg "kører" aspx filen derimod får jeg en linie i compilation source:

public class histogram_aspx : PCV.HistogramSpike, System.Web.SessionState.IRequiresSessionState {

Så vidt jeg har forstået er det noget der bliver genereret på serveren.
Avatar billede tomniels Nybegynder
11. september 2002 - 15:41 #8
Har I nogle ideer til hvad det skyldes???
Jeg kan ikke umidelbart se at jeg har defineret filen flere steder...
Avatar billede z42cool Nybegynder
11. september 2002 - 15:49 #9
Kan du ikke lige paste din .aspx side og din .cs side?
Avatar billede tomniels Nybegynder
11. september 2002 - 15:50 #10
Er du helt sikker på at
<%@ Page Language="C#" Src="dincsfil.cs" Inherits="DinPageClass" %>
er korekt???????
Nu har jeg prøvet at udkomentere alt andet i .aspx filen, samt .cs filen, og det giver stadig samme fejl!!!!!!
Avatar billede tomniels Nybegynder
11. september 2002 - 15:53 #11
<%@ Page Language="C#" AutoEventWireup="false" Src="HistogramSpike.cs" Inherits="PCV.HistogramSpike" Debug="true" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<%@ import Namespace="System.Data.OracleClient" %>
<%@ import Namespace="System.Data" %>


<script runat="server">
  // 
//<%@ Page Language="C#" AutoEventWireup="false" Codebehind="HistogramSpike.cs" Inherits="PCV.HistogramSpike" Debug="true" %>
//<%@ import Namespace="PCV" %>
     
    void Page_Load(Object sender, EventArgs e)
    {
        HistogramSpike test = new HistogramSpike();   
    }       

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:Label id="udskriv" runat="server">Label</asp:Label>
        <!-- Insert content here -->
    </form>
</body>
</html>
Avatar billede tomniels Nybegynder
11. september 2002 - 15:53 #12
namespace PCV {
    using System;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.Drawing.Drawing2D;
    using System.Data.OracleClient;
    using System.Data;
    using System.Web;   
    using System.Web.UI;
    using System.Web.UI.WebControls;
       
   
    public class HistogramSpike : Page {
   
    protected Label udskriv = new Label();
    private int height = 200;
    private int width  = 400;
    private Bitmap b;
    private int []XVal;
    private int []YVal;
    private int max;//, Xmin;
     
     
        public HistogramSpike() {
      // udskriv.Text="Test";
        b = new Bitmap(width, height, PixelFormat.Format16bppRgb555);
       
        this.Response.ContentType= "Image/jpeg";
        int []input = DBTilgang();       
       
        Graphics g = Graphics.FromImage(b);
   
        doState( input/*, Xval, YVal, max */ );//er det nødvendigt med max som input
        drawHistogram(XVal, YVal, max, width, height, g);
   
        b.Save(this.Response.OutputStream, ImageFormat.Jpeg);
   
        b.Dispose();
       
        }
       
        public int[] DBTilgang(){
           
            OracleConnection myConnection = new OracleConnection("server=http://localhost/PCV;Data source=Pizza;User ID=system;Password=manager");
            String sql ="select pris from pizza";
            int[] temp = new int[2];//Der skal initialiseres et array uden længde.
            DataSet ds = new DataSet();
           
            OracleCommand myCommand = new OracleCommand(sql, myConnection);
       
            try{
                OracleDataReader or = myCommand.ExecuteReader();
                int i=0;
                    //Sætter data ind i temp array
                    while(or.Read()){           
                    temp [i]= (int)or.GetInt32(i);               
                    }//end while
                }//end try
       
            catch(OracleException /*exception*/)
            {
                //Page.Response.Write("Test");
              // udskriv.Text="Test";
                //Response.Write("Der er opstået en fejl "+ exception);
            }//end catch
           
            myConnection.Close();
           
            return temp;
        }//end DBTilgang
       
       
        public void doState(int []data/*, int []indXVal, int []indYVal, int indMax*/){
       
            int min;
            max = data[0];
            min = data[0];
 
            //Min og max findes ved at køre data[] igennem.
            for(int i = 0; i<data.GetLength(0); i++)
            {
                if(i>max)
                    max=i;
                if(i<min)
                    min =i;
            }
           
            //Angiver ny længde af Xval og YVal arrays
            XVal = new int[max-min];
            YVal = new int[max-min];
           
            //Her angives x-aksens bredde, og YVal's index sættes alle til 0
           
            for(int i=0; i<max-min; i++)
            {
                XVal[i] = min+i;
                YVal[i] = 0;
            }
           
            // Her tælles hvormange søjler der er med en bestemt størrelse
            for(int i=0; i<YVal.GetLength(0); i++)
            {
                YVal[i-min] +=1;//Der tælles op hvis der findes en værdi svarende til index
            }//end for
           
            //Max antallet findes, for at kunne angive toppen af y-aksen
            max=YVal[0];
            for(int i=0; i<YVal.GetLength(0); i++)
            {
                if(i>max)
                    max=i;
            }// ends for
          }//ends DOState
         
         
          public void drawHistogram(int []dataX, int [] dataY, int max, int width, int height, Graphics g)
          {         
            g.Clear(Color.White);//Giver en blank side
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Pen borderPen = new Pen(Color.Gray,1);
            Pen graphPen = new Pen(Color.Gray,1);
            //dim I as Integer
            int borderLeft,borderRight,borderTop, borderBottom;       
            int chartWidth, chartHeight;
            borderLeft=20;
            borderRight=10;
            borderTop=20;
            borderBottom=20;
            string strHeadline = "Pizza priser";
            int intervalsX = max;//antal intervaller i vandrette gridlinier
           
            /*If intervalsX>10 Then
                intervalsX = CInt(Max/2)
                If Max mod 2 = 1 Then max=max+1
            End If*/
            chartWidth = width-borderLeft-borderRight;
            chartHeight = height-borderTop-borderBottom;
           
            Rectangle rec = new Rectangle(borderLeft,borderTop,chartWidth,chartHeight); //graf-område
            g.DrawRectangle(borderPen,0,0,width-1,height-1);
            LinearGradientBrush lb = new LinearGradientBrush(rec, Color.SteelBlue,Color.White,LinearGradientMode.Vertical);// giver baggrundsfarve fra blå til hvis horisontalt
            g.FillRectangle(lb,rec);
            g.DrawRectangle(borderPen,rec);
           
            StringFormat salign = new StringFormat();
            salign.Alignment = StringAlignment.Center;
            LinearGradientBrush blockbr = new LinearGradientBrush(rec, Color.Yellow,Color.Red,LinearGradientMode.Vertical);
            int blockWidth = (int)(chartWidth / (dataX.GetLength(0)));
            double scale = (chartHeight/max);
            int x, y;
           
            //For hver gennemløb tegnes der en Søjle.
            for(int i=0; i<dataX.GetLength(0)-1; i++)
            {
                x = (int)(borderLeft+blockWidth/3+blockWidth*i); //angiver hvor på x-aksen der skal startes med at tegne
                y = (int)(dataY[i]*scale);//Angiver højden af søjlerne
                Rectangle blockRec = new Rectangle(x, borderTop+chartHeight-y, blockWidth/2 ,y);
                //blockwidth divideres med to for at lave et mellemrum mellem søjlerne
                g.FillRectangle(blockbr,blockRec);
                g.DrawString((dataX[i]-1).ToString(), new Font("Verdana",9,FontStyle.Regular),Brushes.Black, x+blockWidth/4,height-20,salign);
            }
           
            salign.Alignment = StringAlignment.Far;
           
            //
            for(int i=0; i<intervalsX; i++)
            {
                y = (int)(borderTop + i*(chartHeight/intervalsX));
 
                if(i>0 && i<intervalsX)
                    g.DrawLine(graphPen,rec.Left,y ,rec.Right, y);
                    //Tegner de vandrette linier i grafen.
               
                g.DrawString((max-i*max/intervalsX).ToString(), new Font("Verdana",9,FontStyle.Regular),Brushes.Black, borderLeft,y-7,salign);
            }// end for
           
            salign.Alignment = StringAlignment.Center;
            g.DrawString(strHeadline, new Font("Verdana",12,FontStyle.Bold),Brushes.Black, width/2,0,salign);
          }// end drawHistrogram         
    }//end HistogramSpike
}//end namespace
Avatar billede tomniels Nybegynder
11. september 2002 - 15:56 #13
.cs filen er lidt lang, men det meste er noget med db connection, og tegning af et histogram, så jeg håber du kan overskue det:-)
Avatar billede simon.ulsnes Nybegynder
11. september 2002 - 16:18 #14
Du skal ikke have Page_Load i din aspx fil, da den skal ligge i HistogramSpike klassen i .cs filen.
Hvis du har nogle controls på din aspx side, skal du bare deklarere dem igen i din klasse.

ASP.NET:
<asp:Label id="Label1" ... />

C#:
Label Label1 = new Label();

Så kan du komme i kontakt med din label...

// Simon
Avatar billede simon.ulsnes Nybegynder
11. september 2002 - 16:19 #15
hov, det havde du fået med...
Avatar billede simon.ulsnes Nybegynder
11. september 2002 - 16:20 #16
Det kan vistnok bedst betale sig at erstatte constructoren med Page_Load, så bliver det hele kaldt på et lidt bedre tidspunkt.
Avatar billede askhoej Praktikant
11. september 2002 - 16:36 #17
prøv dette:
_______________________________________

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Data.OracleClient;
using System.Data;
using System.Web;   
using System.Web.UI;
using System.Web.UI.WebControls;

namespace PCV {   
   
    public class HistogramSpike : Page {
   
    protected Label udskriv = new Label();
    private int height = 200;
    private int width  = 400;
    private Bitmap b;
    private int []XVal;
    private int []YVal;
    private int max;//, Xmin;
     
     
        public HistogramSpike() {
      // udskriv.Text="Test";
        b = new Bitmap(width, height, PixelFormat.Format16bppRgb555);
       
        this.Response.ContentType= "Image/jpeg";
        int []input = DBTilgang();       
       
        Graphics g = Graphics.FromImage(b);
   
        doState( input/*, Xval, YVal, max */ );//er det nødvendigt med max som input
        drawHistogram(XVal, YVal, max, width, height, g);
   
        b.Save(this.Response.OutputStream, ImageFormat.Jpeg);
   
        b.Dispose();
       
        }
       
        public int[] DBTilgang(){
           
            OracleConnection myConnection = new OracleConnection("server=http://localhost/PCV;Data source=Pizza;User ID=system;Password=manager");
            String sql ="select pris from pizza";
            int[] temp = new int[2];//Der skal initialiseres et array uden længde.
            DataSet ds = new DataSet();
           
            OracleCommand myCommand = new OracleCommand(sql, myConnection);
       
            try{
                OracleDataReader or = myCommand.ExecuteReader();
                int i=0;
                    //Sætter data ind i temp array
                    while(or.Read()){           
                    temp [i]= (int)or.GetInt32(i);               
                    }//end while
                }//end try
       
            catch(OracleException /*exception*/)
            {
                //Page.Response.Write("Test");
              // udskriv.Text="Test";
                //Response.Write("Der er opstået en fejl "+ exception);
            }//end catch
           
            myConnection.Close();
           
            return temp;
        }//end DBTilgang
       
       
        public void doState(int []data/*, int []indXVal, int []indYVal, int indMax*/){
       
            int min;
            max = data[0];
            min = data[0];
 
            //Min og max findes ved at køre data[] igennem.
            for(int i = 0; i<data.GetLength(0); i++)
            {
                if(i>max)
                    max=i;
                if(i<min)
                    min =i;
            }
           
            //Angiver ny længde af Xval og YVal arrays
            XVal = new int[max-min];
            YVal = new int[max-min];
           
            //Her angives x-aksens bredde, og YVal's index sættes alle til 0
           
            for(int i=0; i<max-min; i++)
            {
                XVal[i] = min+i;
                YVal[i] = 0;
            }
           
            // Her tælles hvormange søjler der er med en bestemt størrelse
            for(int i=0; i<YVal.GetLength(0); i++)
            {
                YVal[i-min] +=1;//Der tælles op hvis der findes en værdi svarende til index
            }//end for
           
            //Max antallet findes, for at kunne angive toppen af y-aksen
            max=YVal[0];
            for(int i=0; i<YVal.GetLength(0); i++)
            {
                if(i>max)
                    max=i;
            }// ends for
          }//ends DOState
         
         
          public void drawHistogram(int []dataX, int [] dataY, int max, int width, int height, Graphics g)
          {         
            g.Clear(Color.White);//Giver en blank side
            g.SmoothingMode = SmoothingMode.AntiAlias;
            Pen borderPen = new Pen(Color.Gray,1);
            Pen graphPen = new Pen(Color.Gray,1);
            //dim I as Integer
            int borderLeft,borderRight,borderTop, borderBottom;       
            int chartWidth, chartHeight;
            borderLeft=20;
            borderRight=10;
            borderTop=20;
            borderBottom=20;
            string strHeadline = "Pizza priser";
            int intervalsX = max;//antal intervaller i vandrette gridlinier
           
            /*If intervalsX>10 Then
                intervalsX = CInt(Max/2)
                If Max mod 2 = 1 Then max=max+1
            End If*/
            chartWidth = width-borderLeft-borderRight;
            chartHeight = height-borderTop-borderBottom;
           
            Rectangle rec = new Rectangle(borderLeft,borderTop,chartWidth,chartHeight); //graf-område
            g.DrawRectangle(borderPen,0,0,width-1,height-1);
            LinearGradientBrush lb = new LinearGradientBrush(rec, Color.SteelBlue,Color.White,LinearGradientMode.Vertical);// giver baggrundsfarve fra blå til hvis horisontalt
            g.FillRectangle(lb,rec);
            g.DrawRectangle(borderPen,rec);
           
            StringFormat salign = new StringFormat();
            salign.Alignment = StringAlignment.Center;
            LinearGradientBrush blockbr = new LinearGradientBrush(rec, Color.Yellow,Color.Red,LinearGradientMode.Vertical);
            int blockWidth = (int)(chartWidth / (dataX.GetLength(0)));
            double scale = (chartHeight/max);
            int x, y;
           
            //For hver gennemløb tegnes der en Søjle.
            for(int i=0; i<dataX.GetLength(0)-1; i++)
            {
                x = (int)(borderLeft+blockWidth/3+blockWidth*i); //angiver hvor på x-aksen der skal startes med at tegne
                y = (int)(dataY[i]*scale);//Angiver højden af søjlerne
                Rectangle blockRec = new Rectangle(x, borderTop+chartHeight-y, blockWidth/2 ,y);
                //blockwidth divideres med to for at lave et mellemrum mellem søjlerne
                g.FillRectangle(blockbr,blockRec);
                g.DrawString((dataX[i]-1).ToString(), new Font("Verdana",9,FontStyle.Regular),Brushes.Black, x+blockWidth/4,height-20,salign);
            }
           
            salign.Alignment = StringAlignment.Far;
           
            //
            for(int i=0; i<intervalsX; i++)
            {
                y = (int)(borderTop + i*(chartHeight/intervalsX));
 
                if(i>0 && i<intervalsX)
                    g.DrawLine(graphPen,rec.Left,y ,rec.Right, y);
                    //Tegner de vandrette linier i grafen.
               
                g.DrawString((max-i*max/intervalsX).ToString(), new Font("Verdana",9,FontStyle.Regular),Brushes.Black, borderLeft,y-7,salign);
            }// end for
           
            salign.Alignment = StringAlignment.Center;
            g.DrawString(strHeadline, new Font("Verdana",12,FontStyle.Bold),Brushes.Black, width/2,0,salign);
          }// end drawHistrogram         
    }//end HistogramSpike
}//end namespace
Avatar billede z42cool Nybegynder
11. september 2002 - 16:36 #18
Du kan ikke udkommentere <%@ %> tags, dem du har ekstra skal slettes. Hvis du kan udkommentere dem skal det ihvertfald være med <!-- --> men jeg tror ikke det virker! Prøv med:

<%@ Page Language="C#" AutoEventWireup="false" Src="HistogramSpike.cs" Inherits="PCV.HistogramSpike" Debug="true" %>
<%@ import Namespace="System.Drawing" %>
<%@ import Namespace="System.Drawing.Imaging" %>
<%@ import Namespace="System.Drawing.Drawing2D" %>
<%@ import Namespace="System.Data.OracleClient" %>
<%@ import Namespace="System.Data" %>


<script runat="server">
     
    void Page_Load(Object sender, EventArgs e)
    {
        HistogramSpike test = new HistogramSpike();   
    }       

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:Label id="udskriv" runat="server">Label</asp:Label>
        <!-- Insert content here -->
    </form>
</body>
</html>
Avatar billede z42cool Nybegynder
11. september 2002 - 16:37 #19
askhoej>> Kan ikke umiddelbart se hvad du har ændret, men jeg er ret sikker på, at fejlen ligger i .aspx filen, da hans codebehind fil kompilerer uden problemer!
Avatar billede tomniels Nybegynder
11. september 2002 - 16:44 #20
Jeg bliver nød til at smutte for idag, jeg har ikke fået det til at virke endnu:-(
Men hvis I kan få det til at virke, så vil jeg blive rigtig, rigtig glad, for jeg skal bruge det i morgen. Held og Lykke
Avatar billede tomniels Nybegynder
12. september 2002 - 08:44 #21
God morgen, jeg kan se at der ikke rigtig har været det store fremskridt....

z42cool>> ang. udkommenteringen, så kan det godt lade sig gøre når de blot er flyttet ind i scriptet.

Jeg har fundet ud at, at problemet med multible definitioner skyldes, at jeg selv kompilerede klasse filen, hvor src åbentbart gør det overflødigt ved den automatiske generering vha. et runtime tool. Jeg har dog stadig problemer med at referere til min aspx klasse fra cs filen. I skriver, at man skal bruge this, men når jeg gør det får jeg at vide,at Histogramspike ikke har sådan en metode. this refererer altså til sig selv, og ikke aspx filen.
For at konkretisere spørgsmålet lidt: Hvordan får jeg min Response.ContentType = "image/Jpeg" til at referere til min aspx fil? Det kan muligvis også være, at den hedder HttpResponse, men i alle tilfælde er der tale om et behov for en objektreference til en aspx fil.
Håber i kan hjælpe!
Avatar billede mosekongen Nybegynder
12. september 2002 - 13:19 #22
I stedet for at bruge Src skal du skrive Codebehinde, dermed skal du huske selv at kompilere din klasse og ligge den under Bin biblioteket. Du skal desuden anvende Response, og ikke HttpResponse.
Avatar billede tomniels Nybegynder
12. september 2002 - 13:22 #23
mosekongen>> kan du give et eksempel??
Avatar billede mosekongen Nybegynder
12. september 2002 - 13:23 #24
Lige et eksempel på koden:
Page direction vil se ud som følgende
<%@ Page Language="C#" autoeventwireup="false" codebehind="HistogramSpike.cs" Inherits="PCV.HistogramSpike" Trace="true" Debug="true" %>

og Response vil være sådan:
b.Save(this.Response.OutputStream, ImageFormat.Jpeg);
Avatar billede llcoolj Nybegynder
12. september 2002 - 13:23 #25
Køb en XML bog :-)
Avatar billede tomniels Nybegynder
12. september 2002 - 13:32 #26
Kanon - Nu virker det:-) Tak for det mosekongen.....
I andre skal også have tusind tak for hjælpen, jeg prøver lige at dele pointene mellem jer.
Specielt tak til llcoolj Det var virkelig en stor hjælp:-)
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