2013-06-12 4 views
10

Ciao Sto cercando di eseguire un webmethod con ajax da una pagina aspx. in pratica voglio reindirizzare a un'altra pagina di aspx con una stringa di query, ma voglio farlo da <a href>, perché è parte di un menu jquery.non può chiamare Response.Redirect all'interno di un metodo statico

da quello che ho imparato, posso usare solo ajax per chiamare i metodi web statici, ma non posso reindirizzare dalla mia funzione statica.

Visual Studio segna in una linea rossa dicendo: "è richiesto un riferimento a un oggetto per il metodo non statico campo o la proprietà System.Web.HttpResponse.Redirect (stringa)"

Ecco la chiamata AJAX :

function redirect_to_profile() { 
    $.ajax({ 
     type: "POST", 
     url: "personal_profile.aspx.cs.aspx/redirect_to_profile", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (res) { 
      alert("success"); 
     }, 
     error: function (res, msg, code) { 
      // log the error to the console 
     } //error 
    }); 
} 

qui è il a href:

<a onclick="redirect_to_profile()">Personal Profile</a> 

Ecco l'webmethod all'interno del personal_profile.aspx

[WebMethod] 
public static void redirect_to_profile() 
{ 

    dbservices db=new dbservices(); 
    string user = HttpContext.Current.User.Identity.Name; 
    string id = db.return_id_by_user(user); 

    HttpResponse.Redirect("personal_profile.aspx?id="+id); 
} 
+1

1) non v'è statico 'Response'. 2) Ciò non vorrà comunque. Devi parlare con il JS. – SLaks

+1

ho provato a parlarci, non risponderà:) cosa intendi con questo? – Dvirski

+1

È necessario restituire un risultato che dice al JS cosa fare. – SLaks

risposta

21

È necessario restituire l'URL costruito al client:

public static string redirect_to_profile() 
{ 
    dbservices db=new dbservices(); 
    string user = HttpContext.Current.User.Identity.Name; 
    string id = db.return_id_by_user(user); 
    return "personal_profile.aspx?id="+id; 
} 

Quindi, utilizzando JavaScript, nella funzione del success Chiamata AJAX, impostare la posizione:

window.location = res; 

O forse:

window.location = res.d; 
+0

Grazie! Funziona alla grande – Dvirski

+0

Grazie per questo @Grant! Cosa indica il '.d'? La risposta stessa è solo un oggetto, mentre il '. D' sembra ottenere il valore di stringa ... –

+0

Grazie mille Grant. 'Ris.d' ha fatto il trucco per me –

2

Invece di fare HttpResponse.Redirect è possibile inviare l'URL che si è generato a voi Javascript (risposta alla chiamata Ajax) e quindi utilizzare il codice JavaScript per reindirizzare.

3

È necessario avere il tuo metodo di web passa di nuovo l'ID utente il cui profilo si desidera reindirizzare a, poi nella vostra jQuery successo richiamata impostare il window.location al percorso più la stringa di query, in questo modo:

function redirect_to_profile() { 
    $.ajax({ 
     type: "POST", 
     url: "personal_profile.aspx.cs.aspx/redirect_to_profile", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (res) { 
      // Redirect to personal_profile.aspx passing it the ID we got back from the web method call 
      window.location = "personal_profile.aspx?id=" + res; 
     }, 
     error: function (res, msg, code) { 
      // log the error to the console 
     } //error 
    }); 
} 

[WebMethod] 
public static string redirect_to_profile() 
{ 
    dbservices db=new dbservices(); 
    string user = HttpContext.Current.User.Identity.Name; 
    return db.return_id_by_user(user); 
} 
0

Prova questo:

function myFun(a) { 
      var s = null; 
      var em = document.getElementById(a + 'productno'); 
      if (em != null) 
       PageMethods.setSession(em.innerText); 
      window.location.assign("/Product%20Details.aspx"); 


     } 
+2

Solo il codice senza alcuna descrizione non è abbastanza utile. Gli utenti non sono riusciti a trovare una relazione tra domanda e risposta. Inoltre penso che questa risposta sia completamente estranea alla domanda. – QMaster