با سلام و خسته نباشید
من یک کنترلر نوشتم به شکل زیر
[HttpPost]
public async Task<IActionResult> UpdateNews(UpdateNewsVewModel updateNewsVewModel, IFormFile ImageUrl)
{
if (ImageUrl!=null)
{
string path = PathTools.NewsImageServerPath;
string fileName = Guid.NewGuid() + Path.GetExtension(ImageUrl.FileName);
ImageUrl.Upload(fileName, path);
updateNewsVewModel.ImageUrl = fileName;
}
else
{
var news = await _newsService.GetNewsById(updateNewsVewModel.id);
updateNewsVewModel.ImageUrl = news.ImageUrl;
}
var result = await _newsService.UpdateNews(updateNewsVewModel);
if (!result)
{
return new JsonResult(new { status = "error", message = "خطا در ویرایش خبر" });
}
return new JsonResult(new { status = "success", message = "عملیات با موفقیت ویرایش شد " });
}و کد html
@using PowerHolding.Domain.Entities.ViewModel
@model NewsViewModel
<form id="createNewsForm" asp-action="CreateNews" asp-controller="News" enctype="multipart/form-data" data-ajax="true" data-ajax-method="post"
data-ajax-begin="StartLoading('#MediumModalBody')" data-ajax-complete="EndLoading('#MediumModalBody')" data-ajax-success="CreateNewsDone">
<div class="mb-3">
<label asp-for="Title" class="form-label"></label>
<input asp-for="Title" type="text" class="form-control">
<span class="error-style" asp-validation-for="Title"></span>
</div>
<div class="mb-3">
<label asp-for="Content" class="form-label"></label>
<textarea asp-for="Content" class="form-control" rows="3"></textarea>
<span class="error-style" asp-validation-for="Content"></span>
</div>
<div class="mb-3">
<label asp-for="ImageUrl" class="form-label"> </label>
<input asp-for="ImageUrl" class="form-control" type="file">
<span class="error-style" asp-validation-for="ImageUrl"></span>
</div>
<div class="form-check d-inline-block">
<input asp-for="IsActive" class="form-check-input" type="checkbox" value="" checked>
<label asp-for="IsActive" class="form-check-label" for="flexCheckChecked">
نمایش در اسلایدر
</label>
</div>
<button type="submit" class="btn d-block btn-success btn-block">افزودن خبر</button>
</form>کد جاوا اسکریپت
function CreateNewsDone(response) {
console.log("ok");
if (response.status === "error") {
swal({
title: "خطا",
text: response.message,
icon: "error",
button: "باشه"
});
}
else {
console.log("ok");
$('#MediumModal').modal("hide");
swal({
title: "اعلان",
text: response.message,
icon: "success",
button: "باشه"
});
}
}
حالا وقتی مودال باز میشه و input ها رو پر می کنم فانکشن CreateNewsDone(response) فراخوانی نمیشه
می تونید راهنمایی کنید
سلام وقت بخیر
عذرمیخوام بابت تاخیر در پاسخگویی
چند تا مورد
شما هم توی asp-action فرمتون و هم Action مورد نظری که میخواید بهش برید ، دارید از CreateNews استفاده می کنید در حالی که عکس Action ای که توی Controller فرستادید UpdateNews هست.
خب طبیعتا باید این موارد رو بررسی و اصلاح کنید
مورد بعدی اینکه توی استفاده از data-ajax شما نمی تونید فایل رو به صورت IFormFile ارسال کنید
برای ارسال تصویر میتونید ابتدا تصویر خودتون رو به صورت Ajax و جداگانه از فرمتون آپلود کنید و در ادامه نام تصویر آپلود شده رو به صفحه برگردونید و داخل Input Hidden قرار بدید تا همراه با فرم اصلیتون ارسال بشه و داخل دیتابیس ذخیره اش کنید.
و یا اینکه میتونید به جای استفاده از data-ajax برای ارسال فرم روی رویداد Submit فرمتون preventDefault بزارید و در ادامه formData جدید تشکیل بدید و اطلاعات فرمتون به همراه تصویر انتخاب شده رو به formData اضافه کنید و با Ajax به سمت Controller پست کنید.
این لینک توضیحات لازم به همراه کد رو در این مورد مطرح کرده میتونید مطالعه کنید.
https://stackoverflow.com/questions/9622901/how-to-upload-a-file-using-jquery-ajax-and-formdata
موفق باشید 🌹🙏