‫۹ سال و ۴ ماه قبل، دوشنبه ۱۸ خرداد ۱۳۹۴، ساعت ۲۱:۱۷
عرض کردم: « این تغییر را در سمت سرور، معادل کدهای سمت کلاینت، اعمال کردید؟»
// todo: change `imageName` according to the form's file element name
زمانیکه fileElementId = xThumbnail تنظیم شده، همین نام باید در سمت سرور هم اعمال شود:
[HttpPost]
public ActionResult UploadFiles(HttpPostedFileBase xThumbnail, int id)
{
کلا ASP.NET MVC به همین نحو کار model binding را انجام می‌دهد. هم نام‌ها را به هم نام‌ها متصل می‌کند؛ در همه جا. حالت پیش فرض هست.
‫۹ سال و ۴ ماه قبل، دوشنبه ۱۸ خرداد ۱۳۹۴، ساعت ۲۱:۰۱
این تغییر را در سمت سرور، معادل کدهای سمت کلاینت، اعمال کردید؟
// todo: change `imageName` according to the form's file element name
نام این پارامتر سمت سرور باید با نام المان متناظر آن در فرم یکی باشد و تغییر کند:
      fileElementId: fileElementId, // آی دی المان ورودی فایل
‫۹ سال و ۴ ماه قبل، دوشنبه ۱۸ خرداد ۱۳۹۴، ساعت ۱۹:۵۶
«Content type مقدار بازگشتی از متد UploadFiles حتما باید text/html باشد (افزونه‌ی ارسال فایل‌ها، اینگونه کار می‌کند).»
 return Json(new { FileName = product.ImageName }, "text/html", JsonRequestBehavior.AllowGet);
توسط همان فایرباگ بررسی کنید که چه خروجی از سمت سرور به سمت کاربر ارسال شده (در برگه‌ی response آدرس درخواستی)؟ چه فرمتی دارد؟ شامل چه اطلاعاتی است؟

‫۹ سال و ۴ ماه قبل، دوشنبه ۱۸ خرداد ۱۳۹۴، ساعت ۱۹:۲۲
این متد را به ابتدای فایل ajaxfileupload.js اضافه کنید (برای نگارش‌های جدیدتر jQuery):
jQuery.extend({
handleError: function( s, xhr, status, e ) {
    // If a local callback was specified, fire it
    if ( s.error ) {
        s.error.call( s.context || window, xhr, status, e );
    }

    // Fire the global callback
    if ( s.global ) {
        (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
    }
},
‫۹ سال و ۴ ماه قبل، دوشنبه ۱۸ خرداد ۱۳۹۴، ساعت ۱۸:۲۸
این خطا چند علت می‌تواند داشته باشد:
الف) فایل jQuery به صفحه اضافه نشده‌است.
ب) فایل jQuery چندین بار به صفحه اضافه شده‌است. برای مثال یکبار توسط تعریف مستقیم و یکبار توسط تعریفی مانند بوت استرپ و bundling آن. این مورد تداخل ایجاد می‌کند.
ج) ترتیب معرفی اسکریپت‌ها رعایت نشده‌است. برای مثال قسمت render section، قبل از قسمت تعریف اسکریپت‌های اصلی آمده‌است یا اینکه ترتیب تعریف مدخل ajaxfileupload.js، مانند مثال فوق نیست.
‫۹ سال و ۴ ماه قبل، یکشنبه ۱۷ خرداد ۱۳۹۴، ساعت ۱۴:۴۳
- وجود Thread Sleep با مقداری که در مطلب فوق عنوان شده، ضروری هست. از این جهت که اساسا رابط کاربری معمولی ویندوز، قابلیت پردازش تعداد عظیمی از پیام‌های رسیده را ندارد و باید در این بین به آن فرصت داد. بحث DirectShow مجموعه‌ی Direct-X متفاوت است و طراحی اختصاصی آن برای یک چنین کارهایی است. اما در اینجا نمی‌توانید UI معمولی را با سیلی از داده‌ها و پیام‌های به روز رسانی، مدفون کنید.
- استفاده از متد capture.QueryFrame().ToBitmap اشتباه هست. از این جهت که خروجی capture.QueryFrame می‌تواند نال باشد. بنابراین این تبدیل را باید در داخل حلقه انجام دهید و نه در زمانیکه قصد دارید تصویری را دریافت کنید. شرط موجود در حلقه (مانند مثال اصلی مطلب)، بررسی نال نبودن این فریم دریافتی است. بنابراین اگر نال باشد، حلقه پایان خواهد یافت.
- همانطور که در متن عنوان شد، متد workerProgressChanged در ترد اصلی یا همان ترد UI اجرا می‌شود. بنابراین فراخوانی pictureBoxIpl1.Invoke غیر ضروری است و سربار بی‌جهتی را به سیستم تحمیل می‌کند.
به صورت خلاصه در حین استفاده‌ی از BackgroundWorker:
- متد رخداد گردان DoWork بر روی ThreadPool اجرا می‌شود (ترد آن با ترد UI یکی نیست)
- متد‌های رخدادگردان گزارش پیشرفت کار و اتمام کار، بر روی ترد UI اجرا می‌شوند. بنابراین امکان دسترسی به عناصر UI در این متدها، بدون مشکلی وجود دارد.
‫۹ سال و ۴ ماه قبل، چهارشنبه ۱۳ خرداد ۱۳۹۴، ساعت ۲۳:۲۹
- ابتدا باید با فیلتر Authorize و نحوه‌ی طراحی یک برنامه بر اساس آن، آشنا باشید.
- سپس: « ... سفارشی سازی فیلتر Authorize از ارث بری از AuthorizeAttribute و سپس override کردن متد OnAuthorization آن شروع می‌شود ... »