2013-06-12 5 views
10

Witam Próbuję uruchomić webmethod z ajaxem ze strony aspx. zasadniczo chcę przekierować do innej strony aspx z ciągiem kwerendy, ale chcę to zrobić z <a href>, ponieważ jest częścią jquery menu.nie można wywołać Response.Redirect wewnątrz metody statycznej

Z tego, czego się nauczyłem, mogę używać ajax do wywoływania static webmethods, ale nie mogę przekierować z mojej statycznej funkcji.

visual studio zaznacza go w czerwoną linią mówiąc: „odwołanie do obiektu jest wymagane dla nonstatic metody pola lub właściwości System.Web.HttpResponse.Redirect (string)”

Oto wezwanie 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 
    }); 
} 

tutaj jest a href:

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

oto WebMethod wewnątrz 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) nie ma statyczne 'Response'. 2) W każdym razie tego nie chcesz. Musisz porozmawiać z JS. – SLaks

+1

Próbowałem z nim porozmawiać, nie odpowiem:) co masz na myśli? – Dvirski

+1

Należy zwrócić wynik, który mówi WS, co należy zrobić. – SLaks

Odpowiedz

21

Trzeba będzie wrócić konstruowanej URL do klienta:

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

Następnie przy użyciu JavaScript, w funkcji success z Połączenie AJAX, ustaw lokalizację:

window.location = res; 

A może:

window.location = res.d; 
+0

Dzięki! działa świetnie – Dvirski

+0

Dzięki za ten @Grant! Co oznacza '.d'? Sama odpowiedź jest po prostu obiektem, podczas gdy '.d' wydaje się uzyskać wartość ciągu znaków ... –

+0

Dzięki za dużo Granta. 'res.d' zrobił mi sztuczkę –

2

Zamiast robić HttpResponse.Redirect można wysłać ten URL, które zostały wygenerowane wam Javascript (odpowiedź na wezwanie Ajax), a następnie użyć kodu JavaScript, żeby przekierować.

3

Trzeba mieć metoda internetowej przejść z powrotem identyfikator użytkownika, którego profil chcesz przekierować do, a następnie w swój sukces zwrotnego jQuery ustawić window.location do ścieżki plus ciąg kwerendy, takie jak to:

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

Spróbuj tego:

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

Tylko kod bez żadnego opisu nie jest wystarczająco użyteczny. Użytkownicy nie mogli znaleźć związku między pytaniem a odpowiedzią. Dodatkowo uważam, że ta odpowiedź jest całkowicie niezwiązana z pytaniem. – QMaster