Avatar billede lighterus Nybegynder
15. februar 2003 - 19:31 Der er 14 kommentarer og
1 løsning

brug af .dll i .aspx filer

Jeg har lavet en testklasse guitar der laver nogle guitar objekter:
// guitar.cs
//
using System;

    /// <summary>
    /// Summary description for guitar.
    /// </summary>
    public class guitar
{
    public string make;
    public string model;
    public string year;
   
 

    public guitar(string m, string mo, string y)
    {
        make=m;
        model=mo;
        year=y;
    }
   
 
}
}

Jeg har compilet den til .dll og smidt den i det bib. hvor den .aspx fil jeg kalder den fra ligger. kodedelen for min .aspx fil ser således ud:

static ArrayList myAL = new ArrayList();
void Page_Load(Object sender, EventArgs e) {

myAL.Add(new guitar("james","sampson","1942"));
myAL.Add(new guitar("mike","williams","1942"));
myAL.Add(new guitar("mike","williams","1942"));
myAL.Add(new guitar("mike","williams","1942"));
myAL.Add(new guitar("mike","williams","1942"));
DataGrid1.DataSource= myAL;
DataGrid1.DataBind();
}

Mit problem er at når jeg forsøger at køre .aspx filen så kommer den med følgende fejl:

Compiler Error Message: CS1501: No overload for method 'guitar' takes '3' arguments

Hvad har jeg gjort forkert?
Avatar billede ninakir Nybegynder
15. februar 2003 - 20:33 #1
Nogle spørsmål:
Arbejder du i Visual Studio?
Lavder du code behind til aspx-filen, sådan at du i realiteten kalder guitar.cs fra en anden cs-fil?
Har du i den solution oprettet en reference til guitar.dll?
Har de to filer samme namespace, og hvis ikke, har du oprettet et using direktiv som viser til guitar.cs' namespace?
Det ville være en god idé at erklære en reference til et guitar-objekt inden du begynder at oprette dine "new" guitars.
Avatar billede lighterus Nybegynder
15. februar 2003 - 20:37 #2
hehe, jeg arbejder i Web Matrix... Det der er kun et uddrag af hvad der står...

Hele min .aspx fil ser således ud:

<%@ Page Language="C#" ClassName="guitar" %>
<script runat="server">

    // Insert page code here
    //
   
   
   
    void Page_Load(Object sender, EventArgs e) {
   
    myAL.Add(new guitar("james","sampson","1942"));
   
    myAL.Add(new guitar("mike","williams","1942"));
    myAL.Add(new guitar("mike","williams","1942"));
    myAL.Add(new guitar("mike","williams","1942"));
    myAL.Add(new guitar("mike","williams","1942"));
    DataGrid1.DataSource= myAL;
    DataGrid1.DataBind();
    }

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
        <!-- Insert content here -->
    </form>
</body>
</html>

Jeg er ikke helt med på codebehind og namespaces endnu.... Så jeg kan ik rigtigt fortælle dig så meget mere om hvad jeg har gjort hvordan.
Avatar billede ninakir Nybegynder
15. februar 2003 - 21:59 #3
hmmm og jeg kan godt fortelle dig hvad du skal gøre i Visual Studio .NET, men ikke i Web Matrix, sorry... Men prøv at initialisere guitar class inden du laver "new guitar("","",""), det er i alle fald en sandsynlig årsag til problemerne.

guitar myguitar;

skrives først i Page_Load, inden du adder noget til din ArrayList.
Avatar billede ninakir Nybegynder
15. februar 2003 - 22:09 #4
En anden variant vil være:
guitar myguitar1 = new guitar("mike", "williams", "1942");
guitar myguitar2 = new guitar("mike", "williams", "1942");
myAL.add(myguitar1);
myAL.add(myguitar2);
Avatar billede lighterus Nybegynder
15. februar 2003 - 23:30 #5
Det er bare ikke der problemet ligger...
at skrive:
guitar myguitar1 = new guitar("test","hehe","1421");
og bare new guitar er i princippet det samme når man snakker om at tilføje den til et array f.eks....
Eftersom man da giver det samme objekt til arrayet så der er slet ingen pointe i at initialisere først...
problemet er at det virker som om jit-compileren ikke ved hvordan den skal behandle min klasse selvom jeg har inkluderet den korrekt(så vidt jeg kan se er logisk) og det er det som jeg gerne vil have svar på hvad jeg har gjort forkert.
Avatar billede burningice Nybegynder
15. februar 2003 - 23:59 #6
ninakir>> slemt at være så afhængig af sit IDE at man ikke kan skrive noget kode selv ;) (jeg kan forresten sige at kode skrevet i vs.net ikke er forskellige fra kode skrevet i f.eks. webmatrix eller notepad så jeg kan ikke helt se hvad du mener med at du ved hvordan man skal gøre det i vs.net.

lighterus>> umiddelbart ville jeg sige at fejlen lå i at du skal smide dllfilen i binmappen og ikke samme dir som aspxfilen, men siden compileren kan brokke sig over at du ikke den rigtige constructer må den kende til din klasse.
HVIS du bruger den kode ninakir foreslog, altså først en instans af guitar og derefter adder den til arrayet... brokker den sig så?
Avatar billede lighterus Nybegynder
16. februar 2003 - 01:04 #7
Ja, får nøjagtigt samme fejl(mærkeligt når det i princippet er to måder at skrive det samme?) :)...
Avatar billede burningice Nybegynder
16. februar 2003 - 01:13 #8
uhm.. har du prøvet det med at smide dllfilen i din binmappe?
Avatar billede lighterus Nybegynder
16. februar 2003 - 01:16 #9
Hvis du mener at ligge den i den bin mappe der er i sdk-mappen, så ja... samme fejl.
Avatar billede burningice Nybegynder
16. februar 2003 - 01:49 #10
uhm... den binmappe der er i roden af dit websted... ja... ;)

prøv at lav en default constructer

public guitar() {

}

og se om du kan oprette et object ved hjælp af

guitar g = new guitar();
Avatar billede lighterus Nybegynder
17. februar 2003 - 14:49 #11
jeg har forsøgt... jeg kan godt oprette et objekt på den måde cyberfessor... men selvom jeg har to constructors(eller en) og ligemeget hvad så påstår den at et guitar objekt ikke kræver 3 argumenter :(
Avatar billede lighterus Nybegynder
18. februar 2003 - 02:22 #12
Nåda... Så vidt så godt... Jeg har nu fundet ud af at den slet ikke har fat i min Guitar klasse... Så et svar på hvordan jeg bærer mig ad med at få min Guitar klasse inkluderet på min aspx side(hvor præcist den skal ligge lokalt, hvis man bruger IIS og om den skal compiles manuelt eller ej) vil give pointene... :)
Avatar billede burningice Nybegynder
18. februar 2003 - 10:09 #13
altså... som jeg tidligere har sagt, så SKAL den lille i din binmappe som ligger i roden af din application, f.eks. c:\inetpub\wwwroot\bin <- hvis alle indstillinger er default.

På din aspxside skal du derefter sørge for at lave en <%@ Import %> af dit namespace.
Avatar billede lighterus Nybegynder
18. februar 2003 - 12:30 #14
Ser man det... Nu virker det skam... men jeg blev nødt til at ændre strukturen på min guitarklasse:

namespace Guitar {


public class Guitar
{
    public string monkey;
    public string say;


    public Guitar()
    {
        //..Code for the Constructor
    }
    public string Abeliste // this will be displayed in the column Header in the DataGrid
    {
        get
        {
            return monkey; // this will be displayed in the data field of the DataGrid
        }
        set
        {
            monkey =  value;
        }
        }
    public string Ordliste{
        get
        {
            return say;
        }
        set
        {
            say=value;
        }
    }
    //... Rest of properties
}

}


og således ser min .aspx fil således ud:

<%@ Page Language="C#" %>
<%@ import Namespace="Guitar" %>
<script runat="server">

    // Insert page code here
    //
   
   
    static ArrayList myAL = new ArrayList();
   
    void Page_Load(Object sender, EventArgs e) {
    if(! IsPostBack){
    Guitar minguitar = new Guitar();
    minguitar.monkey = "HOMO";
    minguitar.say = "abesnak";
    DataGrid1.DataSource= null;
    DataGrid1.DataBind();
    myAL.Add(minguitar);
    DataGrid1.DataSource= myAL;
    DataGrid1.DataBind();
    }
    }
   
   
    void Button1_Click(Object sender, EventArgs e) {
        Guitar nyGuitar = new Guitar();
        nyGuitar.monkey= TextBox1.Text;
        nyGuitar.say= TextBox2.Text;
        myAL.Add(nyGuitar);
        DataGrid1.DataSource= myAL;
        DataGrid1.DataBind();
    }

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <p>
            <asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
        </p>
        <p>
            Monkey:<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
        </p>
        <p>
            Say:<asp:TextBox id="TextBox2" runat="server"></asp:TextBox>
        </p>
        <p>
            <asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Button"></asp:Button>
        </p>
        <!-- Insert content here -->
    </form>
</body>
</html>


Tak for hjælpen fessor, hvis du så laver et svar? :)
Avatar billede burningice Nybegynder
18. februar 2003 - 12:37 #15
:) dejligt
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