非静态字段方法需要对象引用或 属性
Object reference is required for the nonstatic field method or property
我正在使用带有 WebMethod 的 C# aspx 网络表单,但我在尝试使用 public 方法调用 class 时遇到问题,我收到此错误消息:
an object reference is required for the nonstatic field method or property.
这是我的代码示例。
DB_Class
public int Cuenta(User us, int opcion)
{
string sql = "";
int res = 0;
switch (opcion)
{
//Insert
case 1:
sql = "query...";
break;
//Update
case 2:
sql = "";
break;
//Delete
case 3:
sql = "";
break;
}
//More code, using executenonquery etc. there is no problem with that.
return res;
}
ASPX, Web方法代码
db_Class conn = new db_Class();
[WebMethod]
public static string RegistrarCuenta(int id, string usuario, string nombre, string apellido, string email, string password, string fechaNacimiento, int tipo, int op)
{
string respuesta = "Ha Ocurrido Un error.";
try
{
User us = new User(id, usuario, nombre, apellido, email, password, fechaNacimiento, tipo);
//I get the error here.
int resp = conn.Cuenta(us, op);
if (resp > 0)
respuesta = "Operacion Realizada Correctamente.";
}
catch (Exception ex)
{
respuesta = "Ha Ocurrido un error: " + ex.Message;
}
return respuesta;
}
我在这里寻找解决方案,但没有发现任何类似我的问题(试图调用另一个 class 中的方法)。我也尝试将我的 webmethod 更改为 public 字符串而不是 public 静态字符串但是现在我得到这个浏览器错误:未知的 web 方法,我不知道这个问题是否是一个坏的 url参考我的ajax代码,这里是我的ajax代码:
$.ajax({
type: 'POST',
url: 'registrar.aspx/RegistrarCuenta',
data: '{' +
'"id":' + id +
',"usuario":"' + user +
'","nombre":"' + nombre +
'","apellido":"' + apellido +
'","email":"' + email +
'","password":"' + password +
'","fechaNacimiento":"' + date +
'","tipo":' + 2 +
',"op":' + 1 + '}',
dataType: "json", // Tipo de datos que se envian
contentType: "application/json", // Tipo de datos qu se envian
timeout: 60000, // Tiempo de espera para que occura un error de timeout
error: function (xhr) { // Evento que se dispara al ocurrir un error en la peticion
swal("Algo a salido mal...", "Error!", "error")
},
success: function (data) { // Evento que se dispara cuando se realiza correctamente
swal(data.d, "", "success");
}
});
PD。 registrar.aspx 位于我的根文件夹中,不在子文件夹中,等等。在根目录中。
我该如何解决我的问题?或者我可以更改什么以使其工作。
conn
是一个实例成员,它不能在静态上下文中访问,因为没有实例可以使用。
更重要的是,使用共享连接对象(尤其是在静态上下文中)通常是一个非常糟糕的主意。只需创建您需要的连接对象where/when:
db_Class conn = new db_Class();
int resp = conn.Cuenta(us, op);
您可以(并且可能应该)删除 class-level conn
成员并保持连接范围非常小。如果它实现了 IDisposable
,你也应该利用它:
int resp = 0;
using (db_Class conn = new db_Class())
{
resp = conn.Cuenta(us, op);
}
在 C# 或 Java、
您不能在静态方法中访问 non-static 成员(变量或函数)。按照@David 的建议,要么将它们声明为静态,要么在 Web 方法中初始化局部变量。
也检查这个 link
https://msdn.microsoft.com/en-us/library/98f28cdx.aspx
我正在使用带有 WebMethod 的 C# aspx 网络表单,但我在尝试使用 public 方法调用 class 时遇到问题,我收到此错误消息:
an object reference is required for the nonstatic field method or property.
这是我的代码示例。
DB_Class
public int Cuenta(User us, int opcion)
{
string sql = "";
int res = 0;
switch (opcion)
{
//Insert
case 1:
sql = "query...";
break;
//Update
case 2:
sql = "";
break;
//Delete
case 3:
sql = "";
break;
}
//More code, using executenonquery etc. there is no problem with that.
return res;
}
ASPX, Web方法代码
db_Class conn = new db_Class();
[WebMethod]
public static string RegistrarCuenta(int id, string usuario, string nombre, string apellido, string email, string password, string fechaNacimiento, int tipo, int op)
{
string respuesta = "Ha Ocurrido Un error.";
try
{
User us = new User(id, usuario, nombre, apellido, email, password, fechaNacimiento, tipo);
//I get the error here.
int resp = conn.Cuenta(us, op);
if (resp > 0)
respuesta = "Operacion Realizada Correctamente.";
}
catch (Exception ex)
{
respuesta = "Ha Ocurrido un error: " + ex.Message;
}
return respuesta;
}
我在这里寻找解决方案,但没有发现任何类似我的问题(试图调用另一个 class 中的方法)。我也尝试将我的 webmethod 更改为 public 字符串而不是 public 静态字符串但是现在我得到这个浏览器错误:未知的 web 方法,我不知道这个问题是否是一个坏的 url参考我的ajax代码,这里是我的ajax代码:
$.ajax({
type: 'POST',
url: 'registrar.aspx/RegistrarCuenta',
data: '{' +
'"id":' + id +
',"usuario":"' + user +
'","nombre":"' + nombre +
'","apellido":"' + apellido +
'","email":"' + email +
'","password":"' + password +
'","fechaNacimiento":"' + date +
'","tipo":' + 2 +
',"op":' + 1 + '}',
dataType: "json", // Tipo de datos que se envian
contentType: "application/json", // Tipo de datos qu se envian
timeout: 60000, // Tiempo de espera para que occura un error de timeout
error: function (xhr) { // Evento que se dispara al ocurrir un error en la peticion
swal("Algo a salido mal...", "Error!", "error")
},
success: function (data) { // Evento que se dispara cuando se realiza correctamente
swal(data.d, "", "success");
}
});
PD。 registrar.aspx 位于我的根文件夹中,不在子文件夹中,等等。在根目录中。
我该如何解决我的问题?或者我可以更改什么以使其工作。
conn
是一个实例成员,它不能在静态上下文中访问,因为没有实例可以使用。
更重要的是,使用共享连接对象(尤其是在静态上下文中)通常是一个非常糟糕的主意。只需创建您需要的连接对象where/when:
db_Class conn = new db_Class();
int resp = conn.Cuenta(us, op);
您可以(并且可能应该)删除 class-level conn
成员并保持连接范围非常小。如果它实现了 IDisposable
,你也应该利用它:
int resp = 0;
using (db_Class conn = new db_Class())
{
resp = conn.Cuenta(us, op);
}
在 C# 或 Java、
您不能在静态方法中访问 non-static 成员(变量或函数)。按照@David 的建议,要么将它们声明为静态,要么在 Web 方法中初始化局部变量。
也检查这个 link https://msdn.microsoft.com/en-us/library/98f28cdx.aspx