2015-07-02 16 views
6

Tôi đang chuyển danh sách của mình sang bộ điều khiển mvc nhưng tôi nhận giá trị null trong bộ điều khiển.Nhưng danh sách của tôi có giá trị khi hiển thị trong cảnh báo ở phía máy khách.nhận giá trị null trong danh sách khi chuyển qua cuộc gọi ajax tới bộ điều khiển mvc

ajax gọi

$("#addTiles").click(function() { 
    userTiles = JSON.stringify({ 
     'userTiles': userTiles 
    }); 
    alert("Entered function."); 
    alert(userTiles[0].TileID); 
    var url = '@Url.Action("AddTiles")'; 
    $.ajax({ 
     type: "GET", 
     url: url, 
     data: userTiles, 
     success: function(d) { 
      if (d.indexOf('"IsSessionExpired":true') != -1) { 
       location.reload(); 
      } else { 
       onAddTilesSuccessful(d); 
      } 
     }, 
     error: function() { 
      errorInOperation(); 
     }, 
     contentType: "application/html; charset=utf-8", 
     dataType: 'html' 
    }); 
}); 

function onAddTilesSuccessful(e) { 
    $("#tilesSubmissionMsg").append(e); 
} 

function errorInOperation(d) { 
    $("#tilesSubmissionMsg").append("Something went wrong"); 
} 

khiển MVC

public ActionResult AddTiles(List<UserTilesVM> userTiles) 
    { 
     return View(); 
    } 

Danh sách mẫu

public class UserTilesVM 
{ 
    public int TileID { get; set; } 
    public int TopPosition { get; set; } 
    public int LeftPosition { get; set; } 
} 

List trong javascript

"{"userTiles":[{"TileID":"3","TopPosition":0,"LeftPosition":0}]}" 

Tôi cũng đã cố gắng bằng cách gửi danh sách của tôi với stringfy nhưng điều đó cũng không hoạt động.

+0

Bất kỳ lỗi nào trong 'bàn điều khiển'? – Tushar

+1

Bạn đã chỉ định 'contentType: 'application/json; charset = utf-8 ', 'và' contentType: "application/html; charset = utf-8", '- không thể là cả hai (ditto cho' dataType') –

+0

vâng tôi đã đề cập đến nó chỉ một lần do nhầm lẫn dán ở đây hai lần – rupinder18

Trả lời

5

Sử dụng: [HttpGet] trên phương pháp AddTiles khi bạn đã sử dụng type: "GET" khi nhấn Ajax.

[HttpGet] 
public ActionResult AddTiles(List<UserTilesVM> userTiles) 
{ 
    return View(); 
} 

Nếu Vẫn không hoạt động sau đó thử type: "POST" trên Ajax nhấn và trên phương pháp sử dụng [HttpPost]

[HttpPost] 
public ActionResult AddTiles(List<UserTilesVM> userTiles) 
{ 
    return View(); 
} 
+0

Phương pháp điều khiển của tôi bị nhấn nhưng trong danh sách của tôi, tôi nhận được giá trị null cách giải quyết vấn đề này – rupinder18

+0

Bạn đang có danh sách "UserTilesVM" trong userTiles. ?? –

+0

nhờ bây giờ workinh của nó đã sử dụng bài như loại và [HttpPost] trên hành động của bộ điều khiển, nó hoạt động bây giờ – rupinder18

5

Bạn có contentType và dataType hai lần trong thiết lập AJAX của bạn, với các giá trị khác nhau, sẽ phá vỡ cuộc gọi AJAX.

Lưu ý contentType phải cho máy chủ biết loại dữ liệu mong muốn và loại dữ liệu là để xác định loại dữ liệu nào được trả lại, từ documentation.

Chỉnh sửa: Tôi thấy bạn đã chỉnh sửa mã của mình!

Trong trường hợp này, vì bạn đang sử dụng JSON.Stringify để sửa đổi dữ liệu bạn đang gửi, bạn sẽ sử dụng contentType: "application/json; charset=utf-8", làm contentType của mình, vì bạn đang gửi dữ liệu JSON đến chương trình phụ trợ.

+0

vâng tôi đã đề cập đến nó chỉ một lần do nhầm lẫn dán ở đây hai lần – rupinder18

+0

Bạn đã xóa sai .Hãy xem xét loại nội dung bạn đang gửi! –

+0

Tôi đã thử thay đổi contentType thành json nhưng vẫn nhận được giá trị null trong danh sách đã sử dụng [HttpGet] trên hành động của bộ điều khiển của tôi quá – rupinder18

1

Tôi nghĩ rằng định nghĩa danh sách của bạn không phải là ok:

"{"userTiles":[{"TileID":"3","TopPosition":0,"LeftPosition":0}]}" 

nên là:

"{"userTiles":[{"TileID":"3","TopPosition":"0","LeftPosition":"0"}]}" 
2

khi chúng ta đang cố gắng để truyền dữ liệu đối tượng sử dụng ajax, chúng ta phải lưu trữ dữ liệu trong biến và truyền dữ liệu trực tiếp sử dụng "dữ liệu: 'biến'" trong AJAX để điều khiển Phương pháp

$("#addTiles").click(function() { 
    var userTiles = ({ 
     'userTiles': userTiles 
    }); 
    alert("Entered function."); 
    alert(userTiles[0].TileID); 
    var url = '@Url.Action("AddTiles")'; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     data: userTiles, 
     success: function(d) { 
      if (d.indexOf('"IsSessionExpired":true') != -1) { 
       location.reload(); 
      } else { 
       onAddTilesSuccessful(d); 
      } 
     }, 
     error: function() { 
      errorInOperation(); 
     }, 
     contentType: "application/html; charset=utf-8", 
     dataType: 'html' 
    }); 
}); 

function onAddTilesSuccessful(e) { 
    $("#tilesSubmissionMsg").append(e); 
} 

function errorInOperation(d) { 
    $("#tilesSubmissionMsg").append("Something went wrong"); 
} 

// Sử dụng [HttpPost] Từ khóa để nhận được giá trị được AJAX truyền.

[HttpPost] 
public ActionResult AddTiles(List<UserTilesVM> userTiles) 
{ 
    return View(); 
} 
+0

Điều này làm việc cho tôi. Cảm ơn sandip58 –

+0

Đề cập đến không ..... –

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