webForumDet fria alternativet

Variabel från klass till klass

.NETur .NET

7 svar · 549 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Hej!

Så här efter semestern, så har aktiviteten i knoppen avstannat...behöver hjälp med att hämta ett
variabel-värde från en klassfil (Upload.vb) från en "codebehind" (också Upload.vb!)

Hur gör man det smidigast?

'CodeBehind Upload.vb

Partial Class fileUpload
    Inherits System.Web.UI.Page

    Public CatName as String = String.Empty

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.User.Identity.IsAuthenticated Then
            Response.Redirect("default.aspx")
        Else
	    CatName = "Detta värde vill jag hämta från Upload.vb"		   
	End If
    End Sub
'Class Upload.vb

Public Class Upload
    Implements IHttpHandler

    Public Sub New()
    End Sub

	Dim sPath As String = String.Empty

	Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) Implements IHttpHandler.ProcessRequest
	 If context.Request.Files.Count > 0 Then
	   sPath = "Här vill jag hämta värdet från CatName" 	
	   uploadFile.SaveAs(String.Format("{0}{1}{2}", tempFile, "Upload\" & sPath & "\", uploadFile.FileName.ToLower))	
	 End If	
    End Sub
End Class
Medlem sedan mars 20011 346 inlägg
#2

Om man vill skicka ett värde mellan klasser, hur går man tillväga?

Medlem sedan jan. 2007152 inlägg
#3

I sin enklaste form, ska du bara skicka in ett värde, göra något med värdet och skicka tillbaka så kan du göra en statisk metod (så slipper du skapa en instans av kalssen, man ska väl dock vara lite föriktig med statiska metoder):

//din klass
    public static int x (int i)
    {
        return i + i;
    }

//din codebehind
Response.Write(MyClass.x(5));
Medlem sedan maj 20012 812 inlägg
#4

Om jag förstod din kod rätt (den är ju i VB som ingen vettig männsika förstår ;)) så vill du hämta ett värde från en klass som är en IHttpHandler till en vanlig page-klass. Eftersom det inte finns någon referens mellan dessa och du inte kan skapa instanser av dessa (de gör ASP.NET motor till dig) så måste du mellanlagra informationen någonstans (typ sessioner) och sedan när du behöver den så får du hämta upp den från sessionen igen.

Det betyder att den "klass" som kommer att köras först (om det är HttpHandler) så skall den spara ner värdet till sessionen och sedan skall page-sidan hämta värdet från sessionen. Du kan dock inte ha dubbelriktad kommunication, eftersom den ena klassen alltid kommer ekeveras före den andra och då kan inte den första sidan hämta något värde från den andra sidan eftersom den inte har exekverats och kan därför inte lägga något värde i sessionen.

- M

Medlem sedan mars 20011 346 inlägg
#5

Jag vill hämta värdet från page-klassen till IHttpHandlern.
Kan man göra det med session? Hur då?

[red.] Man kan tydligen inte hämta en session till class-filen (IHttpHandler)

Medlem sedan juli 20011 304 inlägg
#6

Det borde du visst kunna om du implementerar IRequiresSessionState också :)

Jag är ganska kass på VB men typ:

Public Class MyService Implements IHttpHandler
Implements System.Web.SessionState.IRequiresSessionState

Public Overridable ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
    Get
        Return True
    End Get
End Property

Public Overridable Sub ProcessRequest(ByVal context As HttpContext)Implements IHttpHandler.ProcessRequest
    HttpContext.Current.Session.Add("name", "value")
End Sub
Medlem sedan maj 20012 812 inlägg
#7

ironhead skrev:

Jag vill hämta värdet från page-klassen till IHttpHandlern.

Okej så din sida (page-klassen) kommer exekveras först, och i denna sida så har du någon kontroll som kallar på IHttpHandlern för att utföra något (kanske skapa en bilddynamiskt, eller något annat).

Då skulle jag lägga med den information som du behöver i URL:en till IHttpHandlern så du kan hämta upp den med hjälp av Request.QueryString[].

Du låter helt enkelt din Page-sidan, modierar länken som kallar på HttpHandler! Hur enkelt som helst...

- M

Medlem sedan mars 20011 346 inlägg
#8

Tack! Kunde grejja det med din hjälp :)

If (Not (context.Request.QueryString("ID")) Is Nothing) Then
  ID = context.Request.QueryString("ID")
End If
463 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
342 ms — hämta forumlista (db)
119 ms — hämta statistik (db)
278 ms — hämta tråd, inlägg och bilagor (db)