2017-01-12 5 views
0

Ich bin ein C# aspx Web-Formular mit einem WebMethod verwenden, aber ich habe ein Problem versucht, eine Klasse mit öffentlichen Methoden aufrufe, erhalte ich diese Fehlermeldung:Objektverweis für die nicht-statische Feld Methode oder Eigenschaft erforderlich

an object reference is required for the nonstatic field method or property.

Hier ist ein Beispiel für meinen Code.

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, Webmethode Code

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; 
} 

ich hier nach Lösungen, aber ich nicht gefunden etwas wie mein Problem (versuchen, eine Methode in einer anderen Klasse zu nennen) . Auch ich habe versucht, meine Webmethode zu öffentlichen String intad der öffentlichen statischen String ändern, aber mit diesem jetzt bekomme ich diesen Browser Fehler: Unbekannte Web-Methode, ich weiß nicht, ob dieses Problem für eine schlechte URL-Referenz in meinem Ajax-Code ist, hier ist meine ajax code:

$.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 befindet sich in meinem Stammordner, nein in einem Unterordner usw. im Stammverzeichnis.

Wie kann ich mein Problem lösen? Oder was kann ich ändern, damit es funktioniert?

Antwort

6

ist ein Instanzmitglied, auf das in einem statischen Kontext nicht zugegriffen werden kann, da keine Instanz zu verwenden ist.

Mehr auf den Punkt, die Verwendung gemeinsamer Verbindungsobjekte (vor allem in einem statischen Kontext) ist in der Regel eine sehr schlechte Idee. Erstellen Sie einfach das Verbindungsobjekt, wo/wenn Sie es brauchen:

db_Class conn = new db_Class(); 
int resp = conn.Cuenta(us, op); 

Sie können (und wahrscheinlich sollte) entfernen Sie die Klasse-Ebene conn Mitglied und halten den Umfang der Verbindungen sehr klein. Wenn es IDisposable implementiert, sollten Sie auch die auszunutzen:

int resp = 0; 
using (db_Class conn = new db_Class()) 
{ 
    resp = conn.Cuenta(us, op); 
} 
+0

Thank you so much! –

0

In C# oder Java,

Sie können nicht darauf zugreifen nicht-statische Elemente (Variablen oder Funktionen) in einer statischen Methode. Entweder deklarieren Sie sie als statisch oder initialisieren lokale Variablen in Ihrer Webmethode, wie @David dies vorschlägt.

Check diesen Link auch https://msdn.microsoft.com/en-us/library/98f28cdx.aspx

Verwandte Themen