Nu ska jag ge mig på asp.net tänkte jag...så jag tänkte göra om en hemsida till .net Hej, Tack! Hej, Jo då det är MS Visual Studio. Hej, Tack så jättemycket!Server.CreateObject fast asp.net style? Nybörjarfråga
Så som hemsidan ser ut idag är det aspsidor som går mot en vb6 dll som bla hämtar saker ur en databas.
Detta görs ju med Server.CreateObject("bla.jadajada")
Hur görs detta i .net? Jag tänkte använda VB.net för ändamålet...
Vi kan ta ett exempel i asp & vb6:
ASP:
<code>
Set x = Server.CreateObject("myDll.myClass")
y = x.getHelloWorld
Response.Write y
</code>
VB:
<code>
Public Function getHelloWorld() as String
getHelloWorld = "Hej Världen"
End Function
</code>
Hur skulle detta se ut i asp.net?
Det rör sig förvisso om att hämta lite data ur en databas, och jag skulle uppskatta om jag kunde ha all "middletierkod" samlat på ett ställe, men det kanske är ett helt annat tänk när det gäller dot.netSv: Server.CreateObject fast asp.net style? Nybörjarfråga
ASP.NET fungererar ju en smula annorlunda i jämförelse med VB6.
Till att börja med så är webbsidorna (benämns webbforms) generellt sett uppdelade i två delar. Ett presentationsläge (Html etc) samt ett codebehind-läge (ren logik).
Det du efterfrågar kan du antingen välja att lägga i codebehinden för en viss sida eller i en egen klass som kan användas på din sida. Klassen kan du sedan antingen lägga i webbprojektet eller i ett eget projekt. Vid val av det sistnämnda alternativet måste även en referens läggas till mot det fristående projektets assambly (dll).
Det absolut enklaste är att välja att lägga din logik i samma projekt som resten av webbplatsen, förslagsvis i en egen klass.
Du kan sedan instansiera klassen från codebehind eller ASP.NET som exemplet nedan:
Exempel egen klass
<code>
Imports System
Namespace Level1.Level2
Public Class MyClass
Public Function HelloWorld() As String
HelloWorld = "Hello world"
End Function
End Class
End Namespace
</code>
Exempel Webbform
<code>
<%
Dim myHelloClass As Level1.Level2.MyClass = new Level1.Level2.MyClass()
Response.Write( myHelloClass.HelloWorld() )
%>
</code>
M v h
/MartinSv: Server.CreateObject fast asp.net style? Nybörjarfråga
Jag får det dock inte att funka :(
Gjorde en enkel sida med din kod
men jag får detta:
<code>
Compiler Error Message: BC30002: Type 'Level1.Level2.MinClass' is not defined.
Source Error:
Line 1: <%
Line 2: Dim myHelloClass As Level1.Level2.MinClass = new Level1.Level2.MinClass()
Line 3: Response.Write( myHelloClass.HelloWorld() )
Line 4: %>
</code>Sv: Server.CreateObject fast asp.net style? Nybörjarfråga
Som sagt måste du lägga den första delen i en egen klass i samma projekt för att sedan kompilera det projektet.
Annars känner inte ASP.NET till att det finns någon sådan klass. Vilken miljö arbetar du i?? MS Visual Studio.NET eller någonting annat??
M v h
/MartinSv: Server.CreateObject fast asp.net style? Nybörjarfråga
En egen klass finns, (högerklick på projektet och "Add Class")
I min Index.aspx funkar inte koden, då får jag felet. Det funkar inte ens med att få upp funktionerna i klassen när jag trycker punkt efter det tilldelade klassnamnet (MyHelloClass.) då borde ju HelloWorld poppa upp eller?
Däremot som jag skiriver i Index.aspx.vb så får jag upp det, men hur kommer jag åt det där? Det känns lite som ett steg för mycket att gå den vägen men som sagt jag har inte något riktigt asp.net-tänk ännu.
Kompilera...Jag har kört "Build Solution" men icke...
Mvh
AndreasSv: Server.CreateObject fast asp.net style? Nybörjarfråga
Till att börja med så är jag en C#-kille och kör normalt inte VB.NET. Kikade dock lite på det nu och klurade ut vad som ställer till det .
Det verkar som om ASP.NET delen inte vill tillåta deklarationen och instansiering av klassen i webformet.
De alternativ jag testade var dels att deklarera och instansiera myHelloWorld i aspx.vb filen, samt att alternativ på samma lösning där jag skrev resultatet från metoden till en Label på webformet.
Se exempel nedan:
WebForm (default.aspx)
<code>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="vbnet._default"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>default</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<asp:Label ID="MyLabel" Runat="server" />
</form>
</body>
</html>
</code>
WebForm - CodeBehind (default.aspx.vb)
<code>
Public Class _default
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Public bob As Level1.Level2._MyClass
Protected MyLabel As System.Web.UI.WebControls.Label
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
bob = New Level1.Level2._MyClass()
MyLabel.Text = bob.HelloWorld()
End Sub
End Class
</code>
Klassen - MyClass.vb
<code>
Imports System
Namespace Level1.Level2
Public Class _MyClass
Public Function HelloWorld() As String
HelloWorld = "Hello world"
End Function
End Class
End Namespace
</code>
M v h
/MartinSv: Server.CreateObject fast asp.net style? Nybörjarfråga
Du har räddat min dag
Mvh
Andreas