• 1402/03/27

عدم لود فایل های جاوا اکسریپت در مودال :

با سلام و خسته نباشید

من یک کنترلر نوشتم به شکل زیر 

   [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) فراخوانی نمیشه 

می تونید راهنمایی کنید 

  • 1402/04/04
  • ساعت 00:51

سلام وقت بخیر

عذرمیخوام بابت تاخیر در پاسخگویی

چند تا مورد

شما هم توی 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

موفق باشید 🌹🙏


logo-enamadlogo-samandehi