نظرات مطالب
EF Code First #12
تنظیماتی که برای سازگاری با StructureMap 3 انجام دادید یه مشکلی داره: ارورهای ۴۰۴ به ارورهای ۵۰۰ تغییر می‌کنن چون InvalidOperationException رها می‌شه. برای این قضیه من چنین کاری کردم:
public class StructureMapControllerFactory : DefaultControllerFactory
    {
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null && requestContext.HttpContext.Request.Url != null)
                return base.GetControllerInstance(requestContext, controllerType);

            return ObjectFactory.GetInstance(controllerType) as Controller;
        }
    }
نظرات مطالب
استفاده از چند فرم در کنار هم در ASP.NET MVC
سپاس, در لینک گفته شده است:

حین فراخوانی متد Html.Action، یک متد در یک کنترلر فراخوانی خواهد شد (که شامل ارائه درخواست و طی سیکل کامل پردازشی آن کنترلر نیز خواهد بود). سپس آن متد با بازگشت دادن یک PartialView، اطلاعات پردازش شده یک partial view را به فراخوان بازگشت می‌دهد 
دقیقا همین مورد در این اموزش اجرا شده است
 return PartialView("_Contact", model);
ولی اگر بخواهیم بعد انجام عملیات, اکشن دیگری اجرا بشه چه کار باید کرد؟
من از RedirectToAction استفاده کردم ولی متاسفانه error داد...
 if (this.ModelState.IsValid)
            {
                
                return RedirectToAction(actionName: "show", controllerName:"Posts", routeValues: new { id });
            }
پیغام:
Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'. 
 

Child actions are not allowed to perform redirect actions. 

نظرات مطالب
استفاده از افزونه Typeahead مجموعه Twitter Bootstrap در ASP.NET MVC
matcher یک callback جاوا اسکریپتی است. بنابراین در سمت کلاینت باید پیاده سازی شود (چیزی شبیه به مقدار دهی source پویای مثال آخر بحث).
$('.typeahead').typeahead({
    matcher: function(item) {
        // آیتم مقداری است که باید برای تطابق بررسی شود
        //  this.query کوئری جاری را بر می‌گرداند.
        return true // اگر آیتم تطابق داشته است
    }
})
مثلا:
matcher: function (item) {
    if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) != -1) {
        return true;
    }
}
از matcher برای سفارشی سازی و بررسی اینکه آیا عبارت تایپ شده توسط کاربر با list دریافتی تطابق دارد یا خیر، استفاده می‌شود. حالت پیش فرض، تطابق دقیق لیست دریافتی با متن ورودی کاربر است. با استفاده از matcher در سمت کلاینت می‌توانید نحوه نمایش لیست دریافتی از سرور را سفارشی سازی کنید.
نظرات مطالب
فعال سازی قسمت ارسال فایل و تصویر ویرایشگر آنلاین RedActor در ASP.NET MVC
سلام من در Action مقدار زیرو برمی‌گردونم ولی در  RedActor  نشون نمیده
ولی آپلود درست انجام میشه.
string fileName = Path.GetFileName(file.FileName);
string filePath = "~/App_Data/Uploads/Pic/" + file.FileName;
if (file.ContentLength > 0 && fileName != null)
{
string path = Path.Combine(Server.MapPath("~/App_Data/Uploads/Pic"), fileName);
file.SaveAs(path);
}

return Content("<img src='" + filePath + "' />");
return Content("<img src='" + path + "' />");
نظرات مطالب
EF Code First #14
بعضی مواقع ممکنه نیاز باشه بررسی کنیم آیا موجودیت‌های ما تغییر داشته اند یا خیر (برای مثال در صورتی که تغییرات ذخیره نشده در سیستم وجود دارد ؛ پیغامی مبنی بر ذخیره یا عدم ذخیره کردن تغییرات نمایش دهیم) .برای اینکار من از متد زیر در Context استفاده میکنم:
        public bool HasChanges()
        {
            foreach (var entry in this.ChangeTracker.Entries())
            {
                if (entry.State == EntityState.Modified || entry.State = EntityState.Added)
                {
                    return true;
                }
            }
            return false;
        }
در کد بالا  State موجودیت‌ها بررسی می‌شود.اگر با یکی از دو مقدار Modified و یا Added برابر باشد مقدار true و در غیر این صورت false برمیگرداند.
پاسخ به بازخورد‌های پروژه‌ها
تراز یک ستون بر اساس مقدار ستون دیگر
باید از نکته مطلب «ایجاد قالب‌های سفارشی ستون‌ها و فرمت شرطی اطلاعات در PdfReport » استفاده کنید. مثلا:
column.ColumnItemsTemplate(template =>
                     {
                         template.TextBlock();
                         template.DisplayFormatFormula(obj => obj == null ? string.Empty : string.Format("{0:n0}", Math.Abs((long)obj)));
                         template.ConditionalFormatFormula(list =>
                         {
                             var currentRowCredit = (long)list.GetValueOf<Payment>(x => x.Credit);
                             if (currentRowCredit > 0)
                             {
                                 return new CellBasicProperties
                                 {
                                     FontColor = new BaseColor(System.Drawing.Color.Brown.ToArgb()),
                                     HorizontalAlignment = HorizontalAlignment.Right
                                 };
                             }
                             return new CellBasicProperties { PdfFontStyle = DocumentFontStyle.Normal };
                         });
                     });
پاسخ به بازخورد‌های پروژه‌ها
ایجاد ستون چند داده ای
از فیلد محاسباتی استفاده کنید.
اینجا اگر نوع داده شما strongly typed بود، به نحو زیر دسترسی به کلیه فیلدهای ردیف جاری خواهید داشت:
 column.CalculatedField(true,
                         list =>
                         {
                             if (list == null) return string.Empty;
                             var name = list.GetSafeStringValueOf<User>(x => x.Name);
                             var lastName = list.GetSafeStringValueOf<User>(x => x.LastName);
                             return name + " - " + lastName;
                         });
و اگر strongly typed نبود، مثلا مستقیما کوئری SQL نوشتید، همین متدهای GetSafeStringValueOf و امثال آن (تعریف شده در فضای نام PdfRpt.Core.Helper)، ورودی رشته‌ای هم نام فیلد مدنظر شما را هم قبول می‌کنند.
بازخوردهای پروژه‌ها
خطای property not found
با سلام. 
در این قسمت دچار خطا می‌شوم(property not found)
columns.AddColumn(column =>
                {
                    column.PropertyName<WeekDayClassSessionSemiRow>(x => x.WD0.Percent);
                    column.CellsHorizontalAlignment(HorizontalAlignment.Left);
                    column.IsVisible(true);
                    column.Order(2);
                    column.Width(100);
                    column.HeaderCell("شنبه", horizontalAlignment: HorizontalAlignment.Left);
                    column.ColumnItemsTemplate(template =>
                    {
                        template.ProgressBar(Color.SkyBlue, true);
                        template.DisplayFormatFormula(obj =>
                        {
                            if (obj == null) return "% 0";
                            return "% " + obj.ToString();
                        });
                    });
                });
سوال بعدی اینکه آیا امکان دارد بر اساس مقدار سایر خاصیت‌ها ، برای ستون جاری دستورات شرطی ایجاد کنم ، مثلا رنگ progressBar را تغییر دهم؟
متشکرم.
بازخوردهای پروژه‌ها
ارسال به JsonResult
با سلام
به چه صورت میشه فایل pdf از طریق Jsonresult فلش کرد؟
public JsonResult PdfReport(ReportViewModel model)
        {
            if (model == null)
                return Json(new
                {
                    success = false
                },
                    JsonRequestBehavior.AllowGet);
            var report = new GeneratePdfReport();
            report.CreatePdfReport(AutoMapperHelper.Map<ReportViewModel, Report>(model));
            return Json(new
            {
                success = true
            }, JsonRequestBehavior.AllowGet);
        }
 و برای flash کردن:
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
                    data.FlushInBrowser(fileName, FlushType.Inline);
اما فایل پی دی اف attach نمیشه
پاسخ به پرسش‌ها
آیا امکان استفاده از Extension Method در زمان Select وجود دارد؟

ضمن تشکر. جهت یادگیری میپرسم. اگرچه که AutoMapper میتونه مشکل را حل کنه ولی تمام ستون های مورد نیازم رو باید در configuration تعریف کنم. آیا اگر خودم بتونم یک Selector مانند نمونه زیر ایجاد کنم بهتر نیست؟ دلیل این کار کاهش وابستگی و راندمان بیشتره. آیا ایجاد Selectorی مانند زیر این دو هدف را برآورده میکنه؟

private static Expression<Func<LineJoint, Models.Output.Piping.LineJoints.LineJoint2>> Selector()
{
    //if (Condition())
    //    return x => new Models.Output.Piping.LineJoints.LineJoint2
    //    {
    //        ....
    //    };

    return x => new Models.Output.Piping.LineJoints.LineJoint2
    {
        Id = x.Id,
        JointNo = x.JointNo
    };
}

در نتیجه میتونم query را بصورت زیر اجرا کنم:

var result = await query.Select(Selector()).ToListAsync();