2016-06-18 101 views
-1

我想上傳文件到mvc控制器使用角度,一切工作正常,我得到的文件,即使我有DTO作爲輸入參數在我的控制器,它工作正常,除List類型的成員外,所有成員均由mvc綁定。使用FormData()向MVC控制器發送數組json對象

這裏是我的DTO

public class UpdateMeetingInput 
    { 
     public Guid Id { get; set; } 
     public string Subject { get; set; } 
     public DateTime Date { get; set; } 
     public DateTime EndTime { get; set; } 
     public string Description { get; set; } 
     public string Agenda { get; set; } 
     public bool IsCancelled { get; set; } 
     public List<AttendeeDto> Attendees {get;set;} 
     public string Location { get; set; } 
    } 

,這裏是我的JavaScript文件

 var fd = new FormData(); 
       for (var key in meeting) { 
// i will add attendees later      
if (key != "attendees") { 
         fd.append(key, meeting[key]) 
        } 

       } 
fd.append('attendees', JSON.stringify(meeting.attendees)); 

$http.post("/meeting/update", fd, { 
       headers: { 'Content-Type': undefined } 
      }) 

,這裏是我的控制器

public class MeetingController : TransitControllerBase 
    { 
     private readonly IMeetingManager _meetingManager; 
     private readonly IRepository<Meeting, Guid> _meetingRepository; 
     private readonly IRepository<Decision> _decisionRepository; 
     private readonly UserManager _userManager; 


     public MeetingController (IMeetingManager meetingManager, IRepository<Meeting, Guid> meetingRepository, IRepository<Decision> decisionRepository, UserManager userManager) 
     { 
      _meetingManager = meetingManager; 
      _meetingRepository = meetingRepository; 
      _decisionRepository = decisionRepository; 
      _userManager = userManager; 
     } 
     [HttpPost] 
     public async Task Update (UpdateMeetingInput input) 
     { 

我使用rerquest.form.getvalue觀看與會者值(「參加者」),我得到以下字符串是正確的,但我不知道爲什麼mvc不能綁定它做dto

"[{\"userId\":0,\"name\":null,\"role\":\"4\",\"email\":\"[email protected]\",\"isGuest\":false,\"$$hashKey\":\"object:311\"}]" 

我在發佈數據時做錯了什麼?

回答

0

那是因爲你正在使用表單數據,這 JSON,但JSON.stringify格式列表爲JSON,這是不是有什麼模型綁定的期望。

要解決這個問題,您可以使模型中的參與者成爲字符串,然後從控制器中顯式地將其反序列化爲JSON。

或者,您也可以嘗試使用特殊語法attendees[]作爲字段名稱(注意方括號),而不是JSON.stringify。像這樣:

for (var i = 0; i < attendees.length; i++) { 
    fd.append('attendees['+i+'][userId]', attendees[i].userId); 
    fd.append('attendees['+i+'][name]', attendees[i].name); 
    .... 
} 
+0

我在控制器中顯式地從JSON反序列化它。 – Arash

相關問題