2017-04-12 29 views
2

AjaxからViewModelオブジェクトといくつかのファイルをaspnet web api 2コントローラに渡そうとしていますが、TypeErrorでエラーを送出します。これは正常に動作する余分なファイルオブジェクトを削除します。 webapi2コントローラajaxからオブジェクトとファイルを渡す不正な呼び出し

public IHttpActionResult CreateIssue(IssueDto dto, List<HttpFileCollectionBase> emailAttach) 
    { 
     //Some logic to handle objects passed 
    } 

がIssueDtoこの

public int Id { get; set; } 
    public string Description { get; set; } 
    public string Note { get; set; } 

    public List<int> PersonId { get; set; } //Extra 
    public List<string> ApplicationName { get; set; } 
    public List<string> AttachedFiles { get; set; } 

    public List<PslApplicationDto> PslApplicationDto { get; set; } 
    public UrgencyFlag UrgencyFlag { get; set; } 
    public CompletionFlag CompletionFlag { get; set; } 

    public DateTime? CompletionDate { get; set; } 
    public DateTime? DateIssueRegistered { get; set; } 
    public DateTime? LastUpdate { get; set; } 
    public int CompletionDuration { get; set; } 

    public SolutionDto SolutionDto { get; set; } 
    public PsUserDto PsUser{ get; set; } 
    public EmailDto EmailDto { get; set; } 
    public IssueCategorieDto Category { get; set; } 
    public List<PersonDto> PersonDtos { get; set; } 
    public List<IssueTagsDto> IssueTags { get; set; } 
    public List<int> IssueTagsId { get; set; } // Extra info 

    public int CategorieId { get; set; } 
    public int PsUserId { get; set; } 

のようにすべての情報を探しますされている

      $.ajax({ 
           url: `/api/issues/${ViewModels.issueViewModel.id}`, 
           method: "PUT", 
           data: {dto: ViewModels.issueViewModel, emailAttach: attachFileData}, 
           headers: { 
            'Authorization': 'Bearer ' + token 
           } 
          }) 

issueViewModelは、キーと値のペアのオブジェクトであるとemailAttachがいるFormData に添付されたファイルになりますViewModelにバインドされ、コントローラに渡されます そしてemailAttachはthise codから生成されたキー値FormDataです電子

function attachFile(e) { 
e.stopImmediatePropagation(); 
e.preventDefault(); 

var attachmentInput = document.getElementById("attachInput"); 

if (typeof (attachmentInput.files[0]) === "undefined") { 
    return toastr.error("Please select a file to attach"); 
} 


attachFileData.append(attachmentInput.files[0].name, attachmentInput.files[0]); 
appendAttachmentToForm(attachmentInput.files[0]); 

}

答えて

0

は、文字列にIssueDtoクラスでDTOとファイルのデータ型を変更してみてください。

+0

申し訳ありません私はこの井戸について説明していませんでしたIssueDtoにはオブジェクトとしてdtoが含まれていないため、IssueDtoにマップされています。ファイルはdtでマップされるべきではありません。 – Harry

+0

はい...コントローラに渡されるとき、IssueDtoという名前のクラスが存在する必要があります。このクラスのオブジェクトには、渡された値が格納されます。 –

+0

こんにちは、申し訳ありませんが、私はあなたが何を意味するのか分かりませんが、私は何を意味するのかを明確に説明するコードを更新しました – Harry

関連する問題