2009-01-05 59 views
6

Tôi hoàn toàn bối rối về cách làm các chất liệu ajax với jQuery và có vẻ như tôi càng cố gắng càng bối rối. Tại thời điểm này, tất cả những gì tôi muốn làm là lấy dữ liệu đến controller bằng cách sử dụng jQuery ajax. Một số mã cho cuộc gọi jquery ajax của tôi là.ASP.NET MVC và JQuery nhận thông tin về bộ điều khiển

$(function() { 
    $('#buttonAddLink').click(function() { 
     var AjaxLink = { 
      title: $("#linkTitle").val(), 
      url: $("#linkUrl").val() 
     }; 

     $.ajax({ 
      url: '/User/AddLink', 
      type: 'POST', 
      data: AjaxLink, 
      dataType: 'json', 
      success: function(result){ 
       $('.added').html(result.Result).show(); 
      } 
     });   
    });  
}); 

Đây là bộ điều khiển và Hành động tôi đang sử dụng. Từ cố gắng để xem xét một số hướng dẫn nó "nên" làm việc tốt nhất của kiến ​​thức của tôi, nhưng dường như tôi không nhận được nó giống như tôi nghĩ rằng tôi đã làm.

public ActionResult AddLink(string title, string url) 
{ 
    return Json(new { Result = string.Format(title + " " + url)}); 
} 

Tất cả về cơ bản tôi cố gắng thực hiện điều đó là thực hiện cuộc gọi Ajax và trả lại để hiển thị chỉ để đảm bảo dữ liệu được gửi tới bộ điều khiển.

Trả lời

3

Nó có liên quan đến cách bạn đang cấu trúc yêu cầu của mình. Cuộc gọi JQuery của bạn đang gửi dữ liệu đến hành động AddLink trên bộ điều khiển Người dùng dưới dạng dữ liệu POST, có nghĩa là trong mã C# của bạn, bạn sẽ truy cập nó thông qua đối tượng Request.Form. Với những gì bạn đang cố gắng để làm, bạn muốn cấu trúc URL jQuery như

/User/AddLink/{Title}/{URL} 

này sẽ yêu cầu bạn phải viết một quy tắc trong tập tin Global.asax của bạn mà xử lý mà loại đầu vào. Tóm lại, nếu bạn chỉ sửa đổi phương thức AddLink của mình như sau:

public ActionResult AddLink() 
{ 
    return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])}); 
} 

Tôi tin rằng bạn sẽ nhận được phản hồi mà bạn đang tìm kiếm.

+0

Bạn có thể * truy cập bằng cách sử dụng Request.Form, tuy nhiên khung ASP.NET MVC cũng sẽ tham số hóa các giá trị biểu mẫu nếu nó có thể (mặc dù nó bị nhầm lẫn một chút nếu cùng giá trị được hiển thị trong thông số và biểu mẫu url) . –

1

Bạn đã thử viết URL đầy đủ chưa? Tôi đã có một dự án chạy trên IIS địa phương của tôi đã có cùng một vấn đề. Url đầy đủ là http://localhost/myproject/user/addlink, nhưng sử dụng "/ user/addlink" trong cuộc gọi jQuery ajax đã được gửi đến http://localhost/user/addlink (thông báo rằng "myproject" bị thiếu vì nó không thực sự là url cơ sở theo như jQuery biết).

0

bạn đã thử bằng cách sử dụng phương pháp jQuery.post nên một cái gì đó giống như

jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus) 
{ 
    if(textStatus=="success") 
    { 
    //do something with data which is the result from the call} 
    } 
    else 
    { 
    //failed somewhere along the line 
    } 
},"json"); 

bài giá trị được ánh xạ tới các thông số trong cuộc gọi MVC do đó, mã foxxtrot của nên không cần thiết.

+0

bạn đã sử dụng firebug để kiểm tra dữ liệu nào đang được gửi chưa? là hành động được gọi (có liên quan đến vấn đề định tuyến)? – buildmaster

1

Sử dụng công cụ như firebug để đảm bảo rằng url bạn mong đợi đang được gọi.

Gỡ rối thông thường =>

  1. Sử dụng Firbug để xác định rằng các url được thi công đúng gọi và dữ liệu chính xác đang được gửi trong bài
  2. Phá vỡ các cuộc gọi trong hành động và đảm bảo các thông số được dân cư một cách chính xác
  3. sử dụng Firebug một lần nữa để kiểm tra phản ứng

IE Thanh công cụ nhà phát triển cũng có thể được sử dụng thay cho Firebug nếu bạn thích IE. nếu url cuộc gọi và dữ liệu bài đăng có vẻ chính xác và hành động không được gọi, bạn nên kiểm tra các quy tắc định tuyến của mình. tức là nó có bất kỳ giá trị mặc định trong trường hợp khung MVC sẽ tìm kiếm một chữ ký phương pháp có chứa những giá trị mặc định (bạn có {id} trong quy tắc url của bạn?)

0

Tôi chưa dành thời gian để thử nghiệm nhưng có vẻ như nó sẽ hoạt động, người ta nghĩ rằng tôi sẽ đảm bảo rằng bạn trang trí chức năng điều khiển để cho nó biết nó đang tìm kiếm một bài đăng như như sau:

[HttpPost] 
public ActionResult AddLink() 
{ 
    return Json(new { Result = string.Format(Request.Form["title"] + " " +  Request.Form["url"])}); 
} 

Tôi cần có thời gian để kiểm tra chiều nay nếu không có giải pháp nào phù hợp với bạn.

2

Ok, hãy thử mã này sử dụng Ajax để truyền dữ liệu đến phương pháp hành động của bạn:

jQuery.ajax({ 
      url: '@Url.Action("AddLink", "User")', 
      type: 'POST', 
      contentType: 'application/json', 
      data: JSON.stringify({ title: title, url: url }), 
      success: function (result) { } 
     }); 
+0

Bạn chỉ cần đăng đoạn mã giống như câu trả lời cho mỗi câu hỏi mvc/ajax bạn có thể tìm thấy. Nó thực sự không hữu ích ở đây. -1 –

0

Vì vậy, tôi đã có một chút của một thời gian cố gắng tìm hiểu làm thế nào để có được dữ liệu trở lại từ một cuộc gọi AJAX. Tôi đã đi qua một đối tượng JSON từ khung nhìn đến bộ điều khiển, và sau đó trả về ID của đối tượng khi nó được thực hiện.

Vì vậy, cuối cùng tôi đã làm việc đó, và đây là những gì tôi đã làm trên quan điểm:

var obj = { 
    property1 : '', 
    property2 : '' 
}; 

$.ajax({ 
    // Returns the full url 
    url: '@Url.Action("Method", "Controller")', 
    // Sends as a json object, I actually have an object that maps to my ViewModel, this is just for explaining 
    data: obj, 
    // You are telling that you are receiving a json object 
    dataType: 'json', 
    success: function (id) { 
     // do code here with id 
    } 
}) 

Đối với bộ điều khiển của tôi, tôi trở về một đối tượng JSON và đã làm một AllowGet như một JsonRequestBehavior

public ActionResult Method (ViewModel vm) 
{ 
    int id = ... (do something with the vm) 
    return Json(id, JsonRequestBehavior.AllowGet); 
} 

Chỉnh sửa: Ngoài ra, có vẻ như bạn đã POST làm loại yêu cầu cho bộ điều khiển và phương thức điều khiển của bạn không có chú thích [HttpPost]. Đó cũng có thể là trường hợp.

Tôi hy vọng điều này sẽ hữu ích!
Chúc mừng!

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