Jag har några funktioner som jag vill ha med på ganska många sidor. Jag läste i någon tråd här på wf att man skulle skapa en klass.
Jag har gjort så här
Imports System
Imports System.Web
Imports System.Web.UI
Imports Microsoft.VisualBasic
Namespace Funktioner
Public Class funktioner
Public vbcrlf As String = System.Environment.NewLine
Public Function radbryt(ByVal x As String)
radbryt = Replace(x, vbcrlf, "<br />")
End Function
End Function
End Class
End Namespace
Jag har kompilerat denna till funktioner.dll
Hur ska jag göra för att inkludera funktionen på mina aspx sidor?
Har provat med imports funktioner
PaceMedlem sedan juni 20019 024 inlägg
-
Lägg dll-filen i sajtens Bin-katalog (t ex C:\Inetpub\wwwroot\bin). Du kan skapa katalogen om den inte redan finns.
-
För att importera den på en aspx-sida gör du på detta viset:
<%@ Import Namespace="[i]Namespacets namn[/i]" %>
I en codebehind-fil eller annan dll-fil importerar du den med Imports:
Imports [i]namespacets namn[/i]
En annan sak angående namnet, det blir lätt att blanda ihop det när både namespacet och klassen har samma namn. Döp gärna om enligt följande format:
CompanyName.TechnologyName[.Feature][.Design]
Källa: ms-help://MS.NETFrameworkSDK/cpgenref/html/cpconnamespacenamingguidelines.htm (filen är länkad till .NET SDK dokumentationen på DIN localhost för er som undrar)
nikoMedlem sedan juni 20022 599 inlägg Kan lägga till följande:
Om din klass är designad enbart för att hålla en mängd funktioner så bör den vara markerad som "NotInheritable" och metoderna som "Shared".
I annat fall kommer du att bli tvungen att skapa instanser av klassen för att komma åt funktonerna. Och det är onödigt.
PMedlem sedan jan. 20012 204 inlägg Ehh var anger man detta? Behöver man inte skapa instanser då eller?
nikoMedlem sedan juni 20022 599 inlägg Du anger det som attribut vid deklarationerna:
Public NotInheritable Class funktioner
..
Public Shared Function radbryt
...
Behöver man inte skapa instanser då eller?
Nej. Då kan du anropa dem direkt via klassnamnet och punknotation.
jag har provat med Imports namespacets namn i min codebehindfil och sen anropat funktionen
<%# radbryt(DataBinder.Eval(Container, "DataItem.nyhet")) %>
Har då fått detta fel
Compiler Error Message: BC30451: Name 'radbryt' is not declared
PaceMedlem sedan juni 20019 024 inlägg Skriv funktioner.radbryt() istället.
provade med et men får ett nytt fel
Compiler Error Message: BC30456: 'radbryt' is not a member of 'Funktioner'.
nikoMedlem sedan juni 20022 599 inlägg Nu har du ju en klass och ett NameSpace som enbart skiljer sig på på stor och liten bokstav, vilket kanske inte är lyckat.
Alltså:
Funktioner.funktioner.radbryt
Eller om du importerat namespacet:
funktioner.radbryt
jag bytte namn på namespacet.
Jag har endast inkluderat namespacet i min codebehindfil. Måste ddet importeras i aspx filen också?
PMedlem sedan jan. 20012 204 inlägg För oss osm inte är ägare av visual studio är det ju ett jäkla jobb att komilera klasser hit och dit.. skulle man inte kunna skriva
<%@ Page Language="vb" AutoEventWireup="false" Src="hejjawf.aspx.vb"%>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="hejjawf.aspx.vb"%>
Och sen när man är klar kompierar till en .dll? Eller?
jag inkluderar codebehinden så här
<%@ Page Language="vb" CodeBehind="default.aspx.vb" AutoEventWireup="false" Inherits="cup._default" %>
Måste jag inkludera namespacet i aspx filen också eller räcker det att göra det i codebehindfilen?
Den filen ser ut så här
Imports System.Data.OleDb
Imports System.Data
Imports System.Configuration
Imports System.IO
Imports System.Web.Security
Imports cup.funk
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 datagrid1 As DataGrid
Public label As Label
Public tbusername As TextBox
Public tbPassword As TextBox
Dim objconn As New oledbconnection(ConfigurationSettings.AppSettings("connectionstring"))
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim objcmd As New oledbdataadapter _
("select *from Nyheter order by Id Desc", objconn)
Dim ds As DataSet = New DataSet()
objcmd.fill(ds, "Nyheter")
'välj dataviewobjekt och bind till serverkontrollen
datagrid1.datasource = ds.Tables("Nyheter"). _
DefaultView
DataBind()
End Sub
Public Sub login(ByVal obj As Object, ByVal e As EventArgs)
Dim objcmd As New OleDbCommand _
("SELECT * from users where Username='" + tbusername.Text + "' and password='" + tbPassword.Text + "'", objconn)
Dim dr As OleDbDataReader
objconn.Open()
dr = objcmd.ExecuteReader
If dr.Read Then
Session("user") = dr("Username")
Session("klubbid") = dr("id")
Session.Timeout = "80"
FormsAuthentication.SetAuthCookie(dr("username"), False)
Response.Redirect("inloggad.aspx")
Else
label.Text = "Felaktigt användarnamn eller lösenord<br />"
End If
objconn.Close()
End Sub
Public Sub datagrid1_pageindexchanged(ByVal obj As Object, ByVal e As DataGridPageChangedEventArgs)
datagrid1.CurrentPageIndex = e.NewPageIndex
datagrid1.DataBind()
End Sub
End Class
NETworkMedlem sedan juni 20011 732 inlägg
Måste jag inkludera namespacet i aspx filen också eller räcker det att göra det i codebehindfilen?
Det gör du bara codebehind (det är ju där du använder klassen).
PatrikBMedlem sedan mars 20002 836 inlägg
För oss osm inte är ägare av visual studio är det ju ett jäkla jobb att komilera klasser hit och dit
Nopez!!! det är inte speciellt svårt. Du behöver endast en bat-fil för att göra detta. Jag gillar inte VS.NET alls, utan kodar det mesta med WebMatrix och kompilerar sedan mina dll'er "för hand".
Själv skapar jag en katalog (base-code) som innehåller alla .vb filer som jag arbetar med. I samma katalog skapar jag sedan en bat-fil (egentligen flera st förnamespaces som kompileras till olika dll'er).
En bat-fil kan se ut så här:
mk_web.bat (CompanyName.Web namespace)
=========
vbc /t:library /out:..\bin\CompanyName.Web.dll CompanyName.Web.*.vb /r:System.dll /r:System.Data.dll /r:System.Web.dll /r:..\bin\Microsoft.Data.Odbc.dll
I detta fall så används System, System.Data, System.Web, Microsoft.Odbc.Data i de olika vb-filerna. out:..\bin.... menas att det är output-filen som ligger ett steg upp från min base-code katalog.
De olika vb-filerna med klasser i detta fallet ska ingå i ComanyName.Web namespacet. De vb-filerna namnger jag så här: CompanyName.Web.UI.vb, CompanyName.Web.SomeOtherClass.vb osv.
Efter out:..\... så står det CompanyName.Web.*.vb dvs den kommer endast att ta filer som heter CompanyName.Web.VAD_SOM_HELST.vb och kompilera dessa till CompanyName.Web.dll
Man skulle ju kunna bygga ett eget litet program för att kompilera dll-filerna men nu har man blivit van att köra på detta sättet
För kompilering av enstaka dll'er funkar det som sagt alldeles ypperligt. Annan femma blir det vid client-programmering
cya,
PatrikB
Det gör du bara codebehind (det är ju där du använder klassen).
Jag får det inte att fungera. Den säger att radbryt inte finns i funktioner.