Dies scheint, wie es eine schlechte Idee sein könnte, aber ich kann nicht herausfinden, warum:Putting ein Objekt in der Sitzung über eine Eigenschaft in ASP.NET
Ich habe eine Klasse, CXYZ, mit Eigenschaften A, B und C. Es hat auch eine Methode 'sGetData', die diese drei Eigenschaften aus der Datenbank lädt, und eine Methode'SaveData ', die es zurückspeichert.
class cXYZ
public property A as string...
public property B as string...
public property B as string..
public sub sGetData()...
public sub sSaveData()...
end class
A webform hat folgende Eigenschaft:
private property xyz() as cXYZ
get
return session("myXYZ")
end get
set (value as cXYZ)
session("myXYZ")=value
end set
end property
und die folgenden Ereignisse:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
if not ispostback() then
xyz=new cXYZ()
end if
end sub
Protected Sub ButtonLoad_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonLoad.Click
//Can now reference the class
txtA.text=xyz.A
txtB.text=xyz.B
txtC.text=xyz.C
end sub
Protected Sub ButtonSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSave.Click
//Can now reference the class
xyz.A=txtA.text
xyz.B=txtA.text
xyz.C=txtC.text
xyz.sSaveData()
end sub
ich für jede Eigenschaft einigen Aufwand mit Serialisierung/Deserialisierung sehen referenz es sein könnte es lohnt sich, dies zu tun:
Protected Sub ButtonSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonSave.Click
dim localxyz as cXYZ=xyz
localxyz .A=txtA.text
localxyz .B=txtA.text
localxyz .C=txtC.text
xyz=localxyz
end sub
Abgesehen davon, Ansichten, warum dies gut oder schlecht ist? Die Klasse ist nicht groß, sie behält den Formstatus bei. Webforms saugen, etc ist nicht sehr nützlich ..
Warum die Trycast-Option, wenn die lokale Variable nichts ist? Der einzige Grund, den ich mir vorstellen kann, ist die automatische Abholung der Sitzungskopie des Objekts, wenn es nicht im Ereignismodell instanziiert wurde. (Das kann gültig sein - sagen Sie auf einem zweiten Webformular, das Daten von dem ersten aufnimmt) – ScottK
Sie können DirectCast verwenden, um die Leistung zu erhöhen, aber wenn Variable nichts ist, wird DirectCast oder TryCast es erfolgreich umsetzen, es sei denn, Datentyp ist nicht Referenztyp. –