2016-06-18 15 views
-1

角度を使用してmvcコントローラーにファイルをアップロードしようとしていますが、すべて正常に動作します。すべてのメンバは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がそれをバインドできないのか分からない

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

私はデータの投稿に間違っていますか?あなたはフォームデータない JSONを使用しているが、JSON.stringifyは、モデルバインダーは、期待するものではありませんJSONとしてあなたのリストを、フォーマットしているためだ

答えて

0

これを解決するには、参加者をモデル内の文字列にしてから、コントローラーでJSONから明示的に非直列化することができます。

代わりに、JSON.stringifyではなく、特殊な構文attendees[]をフィールド名として使用することもできます(角括弧に注意してください)。このように:

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

関連する問題