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]);
}
申し訳ありません私はこの井戸について説明していませんでしたIssueDtoにはオブジェクトとしてdtoが含まれていないため、IssueDtoにマップされています。ファイルはdtでマップされるべきではありません。 – Harry
はい...コントローラに渡されるとき、IssueDtoという名前のクラスが存在する必要があります。このクラスのオブジェクトには、渡された値が格納されます。 –
こんにちは、申し訳ありませんが、私はあなたが何を意味するのか分かりませんが、私は何を意味するのかを明確に説明するコードを更新しました – Harry