11. september 2002 - 14:06Der 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?????
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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!
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??
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:
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!
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!!!!!!
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);
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
// 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); }
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.
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);
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
// 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); }
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:
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!
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
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!
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.
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);
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:-)
Synes godt om
Ny brugerNybegynder
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.