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
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));
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.
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
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...