我有以下全局变量:
private ArrayList listSelectedUnavailables
{
get
{
return (ArrayList)ViewState["listSelectedUnavailables"];
}
set
{
ViewState["listSelectedUnavailables"] = value;
}
}
我可以在网络表单的每个过程中使用它。
但是,我需要在同一个WebForm中的WebMethod中使用它,但似乎不能识别任何全局变量。所以:
如何从WebMethod访问全局变量?
答案 0 :(得分:3)
您将值存储在Viewstate中,而WebMethod将无法使用该值,请尝试使用“Session”变量。
private ArrayList listSelectedUnavailables
{
get
{
return (ArrayList)Session["listSelectedUnavailables"];
}
set
{
Session["listSelectedUnavailables"] = value;
}
}
答案 1 :(得分:2)
ViewState
属性取决于让页面(.aspx)回发一个视图状态,这就是存储“变量”的位置。 WebMethod
不包括整页回发(如果有任何回发),因此没有查看状态。相反,您可能希望使用会话变量,如:
private ArrayList listSelectedUnavailables
{
get
{
return (ArrayList)Session["listSelectedUnavailables"];
}
set
{
Session["listSelectedUnavailables"] = value;
}
}
会话将变量存储在Web服务器的内存中(但与特定的浏览器会话相关)。这有它自己的缺点,例如工作流程重置易失性,负载平衡消耗等等。
答案 2 :(得分:2)
您无法访问Web方法中的非静态属性。如果您的业务规则允许您应该使用静态属性
答案 3 :(得分:0)
是的,你可以。 'VB .net示例 _ 公共共享函数LoadController(ByVal serial As String)As String
' sample 1: server object
' •————————————————————————————————————————————————————•
' Crear un objeto server, porque desde un webmethod no se puede acceder directamente....
' •————————————————————————————————————————————————————•
Dim objServer As System.Web.HttpServerUtility
objServer = HttpContext.Current.Server
Dim lAplicacion As New Aplicacion(objServer.MapPath("~"))
Return objServer.MapPath("~") ' ---> P:\Projects\WebApplicationServer\WebApplication\
' •————————————————————————————————————————————————————•
' sample 2: local variable
' •————————————————————————————————————————————————————•
' Acceder a variables de sesion
' •————————————————————————————————————————————————————•
' Crear un objeto Session (visible solo al uaurio actual), porque desde un webmethod no se puede acceder directamente....
' Crear la variable = Session("objSession") = "Esto es una variable de sesion"
Dim objSesion As System.Web.SessionState.HttpSessionState
objSesion = HttpContext.Current.Session
If objSesion.Item("objSession") Is Nothing Then
Return "No existe la variable local"
Else
Return objSesion("objSession").ToString
End If
' •————————————————————————————————————————————————————•
' sample 3: global variable
' •————————————————————————————————————————————————————•
' Acceder a variables de aplicacion
' •————————————————————————————————————————————————————•
' Crear un objeto Aplicacion (visible a todos los visitantes) , porque desde un webmethod no se puede acceder directamente....
' Crear la variable = Application("objAplicacion") = "Esto es una variable global..."
Dim objAplicacion As System.Web.HttpApplicationState
objAplicacion = HttpContext.Current.Application
If (Not objAplicacion("objAplicacion") Is Nothing) Then
Return objAplicacion("objAplicacion").ToString
Else
Return " No existe la variable global..."
End If
' •————————————————————————————————————————————————————•
End Function
// C#示例: [WebMethod(Description =“Proiecto”,CacheDuration = 0)] public static string LoadController(string serial) {
// sample 1: server object
// •————————————————————————————————————————————————————•
// Crear un objeto server, porque desde un webmethod no se puede acceder directamente....
// •————————————————————————————————————————————————————•
System.Web.HttpServerUtility objServer = default(System.Web.HttpServerUtility);
objServer = HttpContext.Current.Server;
Aplicacion lAplicacion = new Aplicacion(objServer.MapPath("~"));
return objServer.MapPath("~");
// ---> P:\Projects\WebApplicationServer\WebApplication\
// •————————————————————————————————————————————————————•
// sample 2: local variable
// •————————————————————————————————————————————————————•
// Acceder a variables de sesion
// •————————————————————————————————————————————————————•
// Crear un objeto Session (visible solo al uaurio actual), porque desde un webmethod no se puede acceder directamente....
// Crear la variable = Session["objSession"] = "Esto es una variable de sesion"
System.Web.SessionState.HttpSessionState objSesion = default(System.Web.SessionState.HttpSessionState);
objSesion = HttpContext.Current.Session;
if (objSesion.Item("objSession") == null) {
return "No existe la variable local";
} else {
return objSesion("objSession").ToString;
}
// •————————————————————————————————————————————————————•
// sample 3: global variable
// •————————————————————————————————————————————————————•
// Acceder a variables de aplicacion
// •————————————————————————————————————————————————————•
// Crear un objeto Aplicacion (visible a todos los visitantes) , porque desde un webmethod no se puede acceder directamente....
// Crear la variable = Application["objAplicacion"] = "Esto es una variable global..."
System.Web.HttpApplicationState objAplicacion = default(System.Web.HttpApplicationState);
objAplicacion = HttpContext.Current.Application;
if (((objAplicacion("objAplicacion") != null))) {
return objAplicacion("objAplicacion").ToString;
} else {
return " No existe la variable global...";
}
// •————————————————————————————————————————————————————•
}