2013-06-12 37 views
10

Xin chào Tôi đang cố gắng chạy một webmethod với ajax từ một trang aspx. về cơ bản tôi muốn chuyển hướng đến một trang aspx khác với một chuỗi truy vấn, nhưng tôi muốn làm điều đó từ <a href>, beacuse nó là một phần của một trình đơn jquery.không thể gọi Response.Redirect bên trong một phương pháp tĩnh

từ những gì tôi đã học Tôi chỉ có thể sử dụng ajax để gọi các phép đo web tĩnh, nhưng tôi canot chuyển hướng từ hàm tĩnh của tôi.

visual studio đánh dấu nó trong một đường đỏ nói: "một tham chiếu đối tượng là cần thiết cho phương pháp không tĩnh lĩnh vực hoặc tài sản System.Web.HttpResponse.Redirect (string)"

đây là cuộc gọi 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 
    }); 
} 

ở đây là a href:

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

đây là WebMethod bên trong 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) không có tĩnh 'Response'. 2) Điều đó sẽ không làm bạn muốn anyway. Bạn cần nói chuyện với JS. – SLaks

+1

tôi đã cố gắng để nói chuyện với nó, nó sẽ không trả lời:) bạn có ý nghĩa gì bởi điều đó? – Dvirski

+1

Bạn cần trả lại kết quả để báo cho JS biết phải làm gì. – SLaks

Trả lời

21

Bạn sẽ cần phải trả lại URL xây dựng cho khách hàng:

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

Sau đó, sử dụng JavaScript, trong success chức năng của Cuộc gọi AJAX, đặt vị trí:

window.location = res; 

Hoặc có thể:

window.location = res.d; 
+0

Cảm ơn! hoạt động tuyệt vời – Dvirski

+0

Cảm ơn bạn đã tham gia @Grant này! '.d' chỉ ra điều gì? Bản thân phản hồi chỉ là một đối tượng, trong khi '.d' dường như nhận được giá trị chuỗi ... –

+0

Cảm ơn rất nhiều Grant. 'res.d' đã làm thủ thuật cho tôi –

2

Thay vì thực hiện HttpResponse.Redirect bạn có thể gửi url này mà bạn đã tạo cho bạn Javascript (trả lời cuộc gọi ajax) và sau đó sử dụng mã Javascript để chuyển hướng.

3

Bạn cần có phương pháp web của bạn vượt qua trở lại ID của người sử dụng có cấu hình bạn muốn chuyển hướng đến, sau đó trong thành công callback jQuery của bạn thiết lập các window.location đến con đường cộng với chuỗi truy vấn, như thế này:

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

Hãy thử điều này:

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

Chỉ mã không có bất kỳ mô tả nào không đủ hữu ích. Người dùng không thể tìm thấy mối quan hệ giữa câu hỏi và câu trả lời. Ngoài ra tôi nghĩ câu trả lời này hoàn toàn không liên quan đến câu hỏi. – QMaster

Các vấn đề liên quan