2012-02-11 35 views
6

Tôi có một trang web đang sử dụng JQuery để giao tiếp với phần cuối. Tôi có một số hành động POST. Tuy nhiên, bây giờ tôi có một hành động GET và tôi đã nhận thấy rằng các giá trị tham số truyền cho nó là null. Hành động POST của tôi hoạt động tốt. Tôi không thể hiểu tại sao.Truyền các tham số từ JQuery đến Controller Action trong ASP.NET MVC 3

Từ tệp .html tôi, tôi có truy vấn JQuery sau:

var vm = { emailAddress:"[email protected]" }; 
$.ajax({ 
    url: "/myService/myAction", 
    type: "GET", 
    data: JSON.stringify(vm), 
    contentType: "application/json", 
    success: myAction_Succeeded, 
    error: myAction_Failed 
}); 

Trong điều khiển của tôi, tôi có:

public class MyServiceController : Controller 
{ 
    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult MyAction(string emailAddress) 
    { 
    return Json(new { address:emailAddress }); 
    } 
} 

tuyến đường của tôi là thiết lập như sau:

context.MapRoute(
    "MyAction", 
    "myService/{controller}/MyAction", 
    new { controller = "MyService", action = "MyAction" } 
); 

Tôi có linh cảm rằng tôi thiếu thứ gì đó trong tuyến đường của mình. Nhưng tôi không chắc nó là gì. Tôi đã làm theo cùng cú pháp mà tôi đã sử dụng với các hành động POST của mình. Các tham số với những hành động này hoạt động tốt. Nhưng các tham số với các hành động GET của tôi, giống như ở trên, có giá trị null. Câu hỏi của tôi là, tôi đang làm gì sai và nếu tôi cần phải vượt qua nhiều thông số?

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn!

Trả lời

4

JsonValueProviderFactory cho phép bạn gửi các yêu cầu JSON tới các hành động điều khiển trong ASP.NET MVC 3 hoạt động với các yêu cầu POST. Nếu có yêu cầu GET bạn có thể sử dụng một yêu cầu tiêu chuẩn:

var vm = { emailAddress:"[email protected]" }; 
$.ajax({ 
    url: "/myService/myAction", 
    type: "GET", 
    data: vm, 
    success: myAction_Succeeded, 
    error: myAction_Failed 
}); 

Hoặc nếu bạn muốn gửi yêu cầu JSON sửa đổi type: 'POST' trong yêu cầu AJAX của bạn. Rõ ràng trong trường hợp này, bạn sẽ phải loại bỏ các thuộc tính HttpVerbs.Get từ hành động điều khiển của bạn mà hiện đang hạn chế nó để chỉ yêu cầu GET.

+0

cảm ơn bạn rất nhiều vì đã giúp đỡ bạn! –

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