2017-04-13 12 views
8
public List<Region> Regions { get; set; } 

trong mô hình gọi là News.An Region Model làFormData thêm mục trong mảng

public class Region 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public static Region Parse(DataRow row) 
     { 
      return new Region 
      { 
       Id = Database.GetInteger(row["Id"]), 

       Name = Database.GetString(row["Region"]), 


      }; 
     } 
    } 

trong Javascript Tôi đang sử dụng phương pháp bài AJAX với formdata. Tôi muốn đặt khu vực này.

var regionList = []; 
      if (selected === "region") { 
       if (region.length <= 0) { 
        toastr.warning('Lütfen en az bir bölge seçin !!!'); 
        return; 
       } 

       for (var i = 0; i < region.length; i++) { 

        var item = { 
         Id: region[i] 
        } 
        regionList.push(item); 
       } 
       console.log(regionList); 
       formData.append("Regions", regionList); 
      } 

Mã trên trong JS tôi đã viết như thế này để thiết lập nó

public ActionResult AddByRegion(News item) 
     { 
      int refPortal = SessionRepository.GetPortalId(); 
      if(refPortal!=1) 
       return View("List", NewsRepository.ListAll(SessionRepository.GetPortalId())); 
      if (item == null 
       || string.IsNullOrEmpty(item.Title) 
       || string.IsNullOrEmpty(item.Content) 
       ) 
       return Content(Serialization.JsonSerialize(new { Status = 400 })); 

      return Content(Serialization.JsonSerialize(new { Status = 200, Result = NewsRepository.AddByRegion(item) })); 
     } 

và mã trên tôi sẽ nhận được trong điều khiển. Nhưng nó trở về luôn luôn 0 kỷ lục mặc dù ít nhất tôi chọn lựa hai khu vực.

$.ajax({ 
       type: 'POST', 
       url: '@Url.Action("AddByRegion", "News")', 
       data: formData, 

       contentType: false, 
       processData: false, 
       success: function(data) { 
        var result = JSON.parse(data); 
        if (result.Result === "SUCCEED") { 
         toastr.success('@Resources.Resource.Success_MediaAdd'); 
         window.location.reload(); 
         return; 
        } 

        else { 
         toastr.error('@Resources.Resource.Error_Unexpected'); 
         return; 
        } 
       }, 
       error: function(error) { 

        toastr.error('@Resources.Resource.Error_Unexpected'); 
        return; 
       }, 
       beforeSend: function() { 
        waitingDialog.show('Wait...'); 
       }, 
       complete: function() { 
        waitingDialog.hide(); 
       } 
      }); 

Phương pháp Ajax của tôi ở trên. Tôi đang phạm sai lầm ở đâu?

Xin cảm ơn trước.

+0

cần phải xác định danh sách khu vực – charlietfl

Trả lời

6

Nếu bạn sử dụng FormData để gửi dữ liệu, bạn cần phải .append() mỗi tên/giá trị riêng lẻ để FormData. Kể từ khi một bộ sưu tập của mình, bạn phải bao gồm indexer bộ sưu tập (mà phải không dựa và liên tiếp), ví dụ

formData.append("Regions[0].Id", someValue); 
formData.append("Regions[0].Name", someValue); 
formData.append("Regions[1].Id", someValue); 
formData.append("Regions[1].Name", someValue); 

Kể từ khi làm bạn này trong một vòng lặp, bạn có thể sử dụng

for (var i = 0; i < region.length; i++) { 
    formData.append("Regions[" + i + "].Id", region[i]) 
} 
1
var regionList = []; 
    for (var i = 0; i < region.length; i++) { 
     var item = { 
      Id: region[i].Id, 
      Name : region[i].Name, 
     } 
     regionList.push(item); 
    } 

    regionList = JSON.stringify({ "item": regionList });//Here "item" name should match the parameter name in your Action method name in controller (item in your case.) 

Sau đó, chuyển đối tượng regionList thành $ .ajax dưới dạng dữ liệu.

$.ajax({ 
      type: 'POST', 
      url: '@Url.Action("AddByRegion", "News")', 
      data: regionList, 

      contentType: false, 
      processData: false, 
      .... 
     }); 
Các vấn đề liên quan