سؤال

لدي نموذج يربط نموذجًا وتحميل ملف باستخدام الموثق الافتراضي لـ httppostedfileBase.

هذا يعمل بشكل جيد عند استخدام html.beginform (). ومع ذلك ، أردت أداء نفس الإجراء باستخدام Ajax ، لذا استبدلت هذا بـ Ajax.beginform () تغيير المعلمات وفقًا لذلك.

لا يزال النموذج يرتبط بشكل صحيح ، ومع ذلك لا يمكنني الحصول على تحميل الملف لربط httppostedfileBase.

هذا يربط النموذج وتحميل الملف:

<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

هذا يربط النموذج فقط:

<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%>

عمل وحدة التحكم:

public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile)

هل يجب أن يكون هذا ممكنًا ، وإذا كان الأمر كذلك ، فماذا أفعل خطأ؟ شكرًا.

هل كانت مفيدة؟

المحلول

لا يمكنك تحميل الملفات مع Ajax. تتمثل إحدى طرق تحقيق ذلك في استخدام iFrame المخفي الذي سيحاكي مكالمة Ajax وتنفيذ تحميل الملف الفعلي أو استخدام Flash. هذا لطيف جدا شكل jQuery البرنامج المساعد باستخدام iframe مخفي قادر على إعادة تصغير عملية تقديم النموذج التي تحتوي على حقول الملفات.

نصائح أخرى

من الممكن ، الجواب هنا:

https://stackoverflow.com/a/13522052/1067149

لقد فعلت ذلك بنفسي وهو مضمون أنه يعمل.

يضيف id="file" في إدخال العلامة الخاص بك

في معلمة ActionResult الخاصة بك ، يجب أن يكون اسم العلامة هو اسم العلامة ، ويجب أن يكون اسم العلامة نفسه

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(tbl_products tbl_products,HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                tbl_products.phototype = file.ContentType;
                tbl_products.photo =new byte[file.ContentLength ];
                file.InputStream.Read(tbl_products.photo,0, file.ContentLength);

                if(obj.insert(tbl_products))
                {
                return RedirectToAction("Index");
                }
                else
                {
                    return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
                }   
            }

            return View(tbl_products);
        }

إنه يعمل بالنسبة لي

نعم أنا أوافق أيضًا. يمكنك بالتأكيد تحميل الملفات باستخدام "ajax.beginform'.add 'enctype =" multipart/form-data "إلى كائن ajaxoptions.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top