سلام
من با استفاده از فرم ajax در Asp.net Core میخواهم فایل اپلود کنم ولی در کنترلر مقدار اون رو null نشون میده علتش چیه ؟
View
<form asp-action="Create" id="Form_Id" enctype="multipart/form-data" asp-controller="ProjectFiles" data-ajax="true" data-ajax-method="Post" data-ajax-mode="replace" data-ajax-success="Create_Success" data-ajax-failure="Create_Failure"> <div class="form-group"> <div class="form-group"> <label asp-for="File_Name" class="control-label"></label> <input asp-for="File_Name" class="form-control" /> <span asp-validation-for="File_Name" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="File_Title" class="control-label"></label> <input asp-for="File_Title" class="form-control" /> <span asp-validation-for="File_Title" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="File_Description" class="control-label"></label> <input asp-for="File_Description" class="form-control" /> <span asp-validation-for="File_Description" class="text-danger"></span> </div> <div class="form-group"> <label asp-for="fileUpload" class="control-label"></label> <input type="file" asp-for="fileUpload" class="form-control" /> <span asp-validation-for="fileUpload" class="text-danger"></span> </div> <div class="form-group"> <input type="submit" value="Create" class="btn btn-default" /> </div> </div> </form>
Controller
public async Task<IActionResult> Create( UploadViewModel uploadViewModel) { return View(); }
این لینک رو ببینید
از این کد استفاده کردم ، مدل و فایل آپلود شده رو به درستی دریافت و ذخیره می کنه ولی میخوام بعد از اینکه عملیات با موفیقت انجام شد بره داخل بخش .success متد و پیام رو نمایش بده ولی یه صفحه خالی نشون میده که داخلش نوشته {success:true}
علتش چیه ؟
JAVASCRIPT
function uploadFiles(inputId) { var input = document.getElementById(inputId); var files = input.files; var formData = new FormData(); for (var i = 0; i != files.length; i++) { formData.append("files", files[i]); } $.ajax({ url: "/ProjectFiles/Create", data: { uploadViewModel: formData }, processData: false, contentType: false, type: "POST", dataType: "json", success: function (result) { if (result.status) { swal({ type: 'success', title: "آپلود فایل", text: " فایل با موفقیت آپلود شد", showConfirmButton: false, timer: 3000 }); $('#modal-info').modal('hide'); $(".modal-backdrop").remove(); } else { swal({ type: 'danger', title: "آپلود فایل", text: "آپلود فایل پروژه ناموفق بود ", showConfirmButton: false, timer: 3000 }); } }, error: function (_err) { swal("خطا", "خطلا در ارسال اطلاعات دوباره سعی کنید", "error"); } }); }
CONTROLLER
public async Task<IActionResult> Create( ProjectFileUploadViewModel viewModel) { if (viewModel.fileUpload == null || viewModel.fileUpload.Length == 0) return Content("file not selected"); var path = Path.Combine( Directory.GetCurrentDirectory(), "wwwroot/UploadFile/ProjectFile", viewModel.fileUpload.FileName); using (var stream = new FileStream(path, FileMode.Create)) { await viewModel.fileUpload.CopyToAsync(stream); } return Json(new { success = true }); }
مشکل در return متدتون است
در واقع داره مقدار بازگشتی رو نمایش میده
[HttpGet("WithProduces")] [Produces("application/json")] public Item GetWithProduces() { return new Item { Id = 123, Name = "Hero" }; }
این راه هم جواب نداد و دوباره همون صفحه خالی با متن رو برمیگردونه
این کد نباید به این صورت باشد؟
return new Item { Id = 123, Name = "Hero" };
return new Item (new { Id = 123, Name = "Hero" });
تفاوتی ندارند دروقع
شما رشته json رو دستی بسازید return کنید شاید اصلا مشکل از اینجا نیست
به این شکل ؟
JsonResult jsonResult = new JsonResult(new { id = "123" }); return jsonResult;
بله
به این صورت هم جواب نداد
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)