تبليغاتX
ASP.NET,C#.NET,Learning,Article,Book

با سلام به دوستان عزیز و همراهان همیشگی این وبلاگ

برای انجام یک وب سایت به یک طراح مسلط به فتوشاپ و html و css هستش

علاقمندان به همکاری می تونن نمونه کارهاشونو به همراه رزومه کاری به mojtaba_sahraei[at]yahoo.com و یا mojtabasahraei[at]gmail.com ارسال کنند

لطفا در قسمت موضوع ایمیل های خودتون عبارت رزومه رو بنویسید

با تشکر از دوستان عزیز



نوشته شده توسط مجتبی صحرائی در یکشنبه دهم اردیبهشت 1391 و ساعت 17:36  
بسیاری از برنامه نویسان وب برای پیاده سازی Ajax از کنترل های مایکروسافت استفاده می کنند

حتما با این کنترل ها و خصوصا ScriptManneger و UpdatePanel آشنایی دارید

همونطور که می دونید وظیفه کنترل ScriptMannager تزریق فایل های جاوا اسکریپتی مورد نظر Ajax به صفحه است و با توجه به عمل مورد نظر و نیازمندی های آن چندین فایل جاوا اسکریپت را به صفحه تزریق می کند. تعداد این فایل های جاوااسکریپتی زمانی زیاد خواهد شد که شما از کنترل های Ajax Control Toolkit نیز استفاده می کنید و بنا به Extender ای که استفاده می کنید کنترل ScriptMannager فایل های جاوا اسکریپت مورد نیاز Extender را نیز به صفحه اضافه خواهد کرد.

در این حالت به ازای هر کدام از این فایل های تزریق شونده به صفحه یک درخواست به سرور فرستاده خواهد شد و هرچه تعداد این فایل ها بیشتر باشد زمان لود بیشتر خواهد شد و صفحه دیرتر نمایش داده می شود

به طور مثال چنانچه از Ajax Control Toolkit و کنترل CalenderExtender به همراه ScriptMannager در صفحه استفاده نمائیم 11 فایل جاوا اسکریپت به صفحه تزریق خواهند شد که این عدد فقط مربوط به استفاده از همین دو کنترل می باشد.

راه حل درست استفاده از تکنیک Script Combining می باشد که در آن به جای مثلا لود 11 فایل جاوا اسکریپتی، فایل های مورد نظر را با هم ترکیب نموده و نهایتا یک فایل به صفحه تزریق شود. راه های مختلفی برای پیاده سازی آن وجود دارد که از جمله می توان یک httpHandler سفارشی نوشت و نام فایل های جاوا اسکریپت مورد نظر را به آن ارسال نمود و فایل های مورد نظر را پس از یکی نمودن در سمت سرور (و کش کردن در صورت نیاز) به صفحه تزریق نمود.

اما در Microsoft Ajax و از DotNet 3.5 sp1 به بعد این امکان در کنترل ScriptMannager بوجود آمد که شما می توانید Script های خود را به این کنترل معرفی نموده و این کنترل عمل Combining (یکی نمودن اسکریپت ها) را برای شما انجام دهد. به این صورت =>


  1. <asp:ScriptManager ID="ScriptManager1" runat="server">
  2.  <CompositeScript>
  3.   <Scripts>
  4.    <asp:ScriptReference Path="~/JS/JScript1.js" />
  5.    <asp:ScriptReference Path="~/JS/JScript2.js" />
  6.   Scripts>
  7.  CompositeScript>
  8. asp:ScriptManager>

برای اضافه کردن اسکریپت های معمولی که در فلدر های سایت موجود هستند به راحتی عمل Combining انجام پذیر می باشد اما از کجا بدانیم ScriptMannager و بطور مثال Ajax Control Tollkit ها چه اسکریپت هایی را به صفحه تزریق می کنند؟

ScriptReferenceProfiler به شما کمک می کند تا بتوانید متوجه بشوید که در حین کار با Microsoft Ajax از چه اسکریپت هایی در  صفحه استفاده می شود. سپس می توانید اسکریپت های مورد نظر را به روشی که در بالا دیدید توسط ScriptMannager یکی کنید.

کافیست از صفحه رسمی ASP.NET در سایت Codeplex کنترل ScriptReferenceProfiler را دانلود نمائید و سپس با اضافه نمودن این کنترل به Tollbox آنرا به صفحه خود اضافه نمائید.

در مثالی که ذکر شد و 11 فایل جاوا اسکریپت به صفحه تزریق شدند، خروجی ScriptReferenceProfiler  به صورت زیر می باشد =>

حال به راحتی می توان با استفاده از اطلاعاتی که ScriptReferenceProfiler در اختیار ما قرار می دهد عمل Combining را توسط SciptMannager انجام دهیم، به عبارت دیگر عین ScriptReference هایی را که ScriptReferenceProfiler نشان می دهد را در قسمت Scripts کنترل ScriptMannager بنویسید=>

  1. <asp:ScriptManager ID="ScriptManager1" runat="server">
  2.  <CompositeScript>
  3.   <Scripts>
  4.    <asp:ScriptReference Name="MicrosoftAjax.js" />
  5.    <asp:ScriptReference Name="MicrosoftAjaxWebForms.js" />
  6.    <asp:ScriptReference Name="Common.Common.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  7.    <asp:ScriptReference Name="Common.DateTime.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  8.    <asp:ScriptReference Name="Compat.Timer.Timer.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  9.    <asp:ScriptReference Name="Animation.Animations.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  10.    <asp:ScriptReference Name="ExtenderBase.BaseScripts.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  11.    <asp:ScriptReference Name="Animation.AnimationBehavior.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  12.    <asp:ScriptReference Name="PopupExtender.PopupBehavior.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  13.    <asp:ScriptReference Name="Common.Threading.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  14.    <asp:ScriptReference Name="Calendar.CalendarBehavior.js" Assembly="AjaxControlToolkit, Version=4.1.40412.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" />
  15.   Scripts>
  16.  CompositeScript>
  17. asp:ScriptManager>


نوشته شده توسط مجتبی صحرائی در سه شنبه بیست و دوم آذر 1390 و ساعت 17:57  

امروزه چارت ها در ارائه آمار و اطلاعات در زمینه های مخنلف جایگاه مهم و بسزایی رو دارند و با گسترش روز افزون سیستم های تحت وب وجود چارت ها برای ارائه آمار و اطلاعات یک سایت امری الزامیست.

با ارائه sp1 دات نت فریمورک 3.5 مایکروسافت کنترل جدیدی رو تحت عنوان asp:chart به مجموعه کنترل های ASP.NET اضافه کرد که این کنترل در نسخه بعدی دات نت یعنی دات نت 4.0 جزئی از فریمورک شد و هم در برنامه های win و هم در برنامه های web کنترل chart در ToolBox موجود و قابل استفاده است.

در این مقاله خواهیم دید که چطور می توان آمار و اطلاعات مورد نظر را تحت قالب chart در ASP.NET MVC نسخه 3 نمایش داد.

یک راه حل این است که خودمان تگ های html ای را با ساختار و استایل مناسب در view مورد نظرمان render کنیم.

اما راه حل ساده تری هم وجود دارد و آن استفاده از ASP.NET Web Helpers Library می باشد که توسط مایکروسافت ایجاد شده و شامل توابع و کلاس هایی برای کارهای رایج و معمول در وب می باشد که در این بین کلاس هایی برای کار با FaceBook,Twitter,Gravatar,Bing,… را نیز دارا می باشد.

برای اضافه کردن این Library به پروژه یا می باید dll مربوطه را دانلود نمائید و سپس Add Reference کنید و یا اینکه چنانچه افزونه NuGet بر روی سیستمتان (VS) نصب می باشد می توانید در پنجره Solution Explorer روی گزینه References کلیک راست نموده و گزینه Manage NuGet Packages را انتخاب کنید.


سپس با انتخاب گزینه All از سربرگ Online منتظر بمانید تا لیستی از Library هایی که بیشترین دانلود را داشته اند ظاهر گردد


از لیست نمایان شده گزینه ASP.NET Web Helpers Library را انتخاب نموده و بر روی دکمه Install کلیک کنید. با این کار dll مربوط به این کتابخانه به پروژه شما اضافه خواهد شد و می توانید از آن استفاده کنید


همه چیز برای شروع کدنویسی آماده است.

یک ActionResult جدید با نام DrawChart ایجاد کرده و متغیری از نوع string به منظور نوع چارت مورد نظرمان به عنوان آرگومان ورودی برای این ActionResult قرار می دهیم

public ActionResult DrawChart(string chatType)
  1.         {
  2.             var chart =
  3.                 new Chart(width: 500, height: 400)
  4.                 .AddTitle("Chart Title")
  5.                 .AddSeries
  6.                             (
  7.                                 chartType: chatType,
  8.                                 xValue: new[] { "A", "B", "C", "D" },
  9.                                 yValues: new[] { "26", "35", "8", "19" }
  10.                             )
  11.                 .GetBytes("png");
  12.             return File(chart, "image/bytes");
  13.         }

مرحله بعد این خواهد بود که خروجی عکس را در یک img نمایش دهیم. این امر را با فراخوانی ActionResult خود که DrawChart نام دارد و ارسال پارامتر مورد نظر به آن انجام می دهیم.


  1. <img src="@Url.Action("DrawChart", new { chatType = "pie" })" alt="Pie Chart" />

  2. <img src="@Url.Action("DrawChart", new { chatType = "bar" })" alt="Bar Chart" />

  3. <img src="@Url.Action("DrawChart", new { chatType = "column" })" alt="Column Chart" />

خروجی به صورت زیر خواهد بود




نوشته شده توسط مجتبی صحرائی در چهارشنبه هجدهم آبان 1390 و ساعت 21:14  
فرض کنید رکوردی رو در دیتابیس ذخیره کردید و یا رکورد موجودی رو ویرایش کردید و می خواهید آخرین رکوردی که اصطلاحا مورد بازبینی قرار گرفته را در اختیار داشته باشید

فرض کنید بدین منظور ستونی در جدول مورد نظر قرار داده ایم و با هر تغییر در رکورد مقدار آنرا نیز تعویض کرده تا بدین ترتیب متوجه رکورد تغییر یافته شویم که در این مثال و در جدول Person ستونی با نام Revision ایجاد شده است

بنابراین کوئری Linq متناسب با این سناریو به صورت زیر خواهد بود


  1. public IEnumerable<Person> GetPersons()
  2.         {
  3.             return from person in Person.All()
  4.                    group person by person.Id
  5.                    into personGroup
  6.                    from entity in personGroup
  7.                    where entity.Revision == personGroup.Max(x => x.Revision)
  8.                    select entity;
  9.         }



نوشته شده توسط مجتبی صحرائی در سه شنبه هفدهم آبان 1390 و ساعت 22:58  

در زیر لیستی از خصوصیات جدید WCF 4.5 رو مشاهده می کنید (Developer Preview) =>

  • Simplification of generated configuration files.
  • Support for contract-first development.
  • Ability to configure ASP.NET compatibility mode more easily.
  • Changes in default transport property values to reduce the likelihood that you will have to set them.
  • Updates to the XmlDictionaryReaderQuotas class to reduce the likelihood that you will have to manually configure quotas for XML dictionary readers.
  • Validation of WCF configuration files by Visual Studio as part of the build process, so you can detect configuration errors before you run your application.
  • New asynchronous streaming support.
  • New HTTPS protocol mapping to make it easier to expose an endpoint over HTTPS with Internet Information Services (IIS).
  • Ability to generate metadata in a single WSDL document by appending ?singleWSDL to the service URL.
  • Websockets support to enable true bidirectional communication over ports 80 and 443 with performance characteristics similar to the TCP transport.
  • Support for configuring services in code.
  • XML Editor tooltips.
  • ChannelFactory caching support.
  • Binary encoder compression support


  • نوشته شده توسط مجتبی صحرائی در سه شنبه دهم آبان 1390 و ساعت 18:19  

    در زیر لیستی از خصوصیات جدید ASP.NET 4.5 رو مشاهده می کنید (Developer Preview) =>

  • Support for new HTML5 form types.
  • Support for model binders in Web Forms. These let you bind data controls directly to data-access methods, and automatically convert user input to and from .NET Framework data types.
  • Support for unobtrusive JavaScript in client-side validation scripts.
  • Improved handling of client script through bundling and minification for improved page performance.
  • Integrated encoding routines from the AntiXSS library (previously an external library) to protect from cross-site scripting attacks.
  • Support for WebSockets protocol.
  • Support for reading and writing HTTP requests and responses asynchronously.
  • Support for asynchronous modules and handlers.
  • Support for content distribution network (CDN) fallback in the ScriptManager control.


  • نوشته شده توسط مجتبی صحرائی در سه شنبه دهم آبان 1390 و ساعت 18:14  
    فرض کنید یک query در entity framework نوشته اید که منجر به بازیابی تعدادی رکورد خواهد شد

    چنانچه توسط break point نگاهی به مقدار خروجی query بیندازید خواهید دید که برای  property ای به نام Name مقدار it قرار داده شده است

    نکته ای که در این پست قصد بیان آنرا دارم این است که چنانچه بخواهید توسط متد Where نتایج حاصل از query خود را بدون استفاده از Linq Expression و با نوشتن t sql فیلتر کنید می باید قبل از نام ستون مورد نظر خود عبارت it را بنویسید

    در واقع it یک alias برای مجموعه نتایج بازگشتی می باشد بنابراین برای دستیابی به ستون های مورد نظر می باید ابتدا و قبل از نام ستون alias را ذکر نمائید

    query زیر با توجه به توضیحات مختصر فوق باعث می شود رکورد هایی از entity ای به نام titles که type شان برابر با business می باشد بازیابی شوند


    1. var db = new PubsEntities();
    2. var query = db.titles.Where("it.[type]=@p1", new System.Data.Objects.ObjectParameter("p1", "business"));
    3. foreach (var item in query)
    4.     {
    5.         Response.Write(item.title1 + "<br />");
    6.     }



    نوشته شده توسط مجتبی صحرائی در دوشنبه دوم آبان 1390 و ساعت 23:28  

    با سلام به دوستان عزیز

    در پست قبل که بنده "نرم افزار مدیریت بایگانی نامه های وارده و صادره" رو معرفی کردم مشکلی وجود داشت و اونم اینکه بنده اشتباها نسخه پائین تر کامپوننت DotNetBar رو در کنار برنامه قرار داده بودم که برنامه در اجرا با خطا مواجه میشد

    این مشکل هم اکنون برطرف شده و فایل درست آپلود شده و لینک دانلود فایل نیز متعاقبا اصلاح شده(از دوستان عزیز عذرخواهی می کنم)

    برای دانلود فایل هم می تونید از پست قبل و هم از لینک زیر برنامه رو دانلود کنید

    دانلود نرم افزار مدیریت بایگانی نامه های وارده و صادره



    نوشته شده توسط مجتبی صحرائی در یکشنبه یکم آبان 1390 و ساعت 16:14  
    چند ماه پیش نرم افزار کوچکی رو به درخواست یکی از دوستانم نوشتم که مدیریت بایگانی نامه های وارده و صادره را انجام می دهد

    در این نرم افزار شما قادر خواهید بود تا تمامی مشخصات یک نامه از قبیل موضوع؛ از؛ به؛ تاریخ؛ شماره و ... را به همراه عکس های اسکن شده نامه ذخیره نمائید. سپس نرم افزار یک کد بایگانی به شما نمایش خواهد داد و با درج این شماره بر روی نامه آنرا در زونکن مربوطه قرار می دهید.

    نکته دیگر اینکه چنانچه مدیر و یا مسئول قسمتی دیگر از شما درخواست مشخصات و یا محتویات نامه ای بایگانی شده را داشته باشد لازم نیست دفتر نامه ها را بالا و پائین کنید تا نامه مورد نظرتان را بیابید بلکه کافیست با جستحو در این نرم افزار سریعا مشخصات نامه را یافته و چنانچه عکس های نامه و پیوست های آن را ذخیره کرده باشید به محتویات آن نیز سریعا دسترسی داشته باشید.

    تصاویری از محیط برنامه به همراه توضیحات آن را در زیر شاهد خواهید بود:

     فرم ورود برنامه که نام کاربری و رمز ورود برابر با ۱ می باشد

    نمای اصلی برنامه و ثبت نامه جدید که پس از وارد نمودن مشخصات نامه شماره بایگانی به طور خودکار ایجاد خواهد شد

    آیتم های قسمت های از و به از طریق تب تنظیمات از/به مدیریت می شوند و همچنین آیتم های اهمیت نامه از تب تنظیمات اهمیت نامه

    در قسمت تنظیمات نرم افزار می تونید استایل تب ها رو تغییر بدید و ذخیره کنید تا در دفعه بعدی اجرای برنامه تب دلخواه شما انتخاب شده باشه

    فرض کنید که شما ۳۰۰ نامه را قبلا شماره زدید و در زونکن قرار دارد و می خواهید این نرم افزار شماره بایگانی را از ۳۰۰ شروع کنید که این امر رو می تونید با وارد نمودن شماره مورد نظر در قسمت "شروع شماره بایگانی از"  از تب تنظیمات نرم افزار انجام بدید

    مشخصات یک نامه را به همراه تصاویر آن ذخیره می کنیم

    حال برای جستجوی نامه ها بر روی تب همه نامه ها کلیک کرده و بر روی علامت ذره بین کوچک واقع در سمت چپ و پائین صفحه کلیک کنید تا فرم جستجو نمایان گردد

    بر روی هر کدام از نتایج پیدا شده که دوبار کلیک کنید جزئیات نامه به همراه عکس های آن نمایان می گردد و می توانید نامه مورد نظر را ویرایش نمائید

    این نرم افزار را می توانید از آدرس زیر دانلود نمائید

    دانلود نرم افزار مدیریت بایگانی نامه های وارده/صادره

    در این نرم افزار به منظور زیباسازی صفحات و کنترل های آن از سری کنترل های DotNetBar استفاده شده است

    ویرایش مطلب در تاریخ ۱/۸/۹۰

    دو نکته در مورد استفاده از این نرم افزار:

    ۱- پیش نیاز اجرای این نرم افزار Microsoft .NetFramework 2.0 هستش

    ۲- بنده اشتباها dll نسخه پائین تر DotNetBar رو کنار برنامه قرار داده بودم و به همین دلیل نرم افزار اجرا نمی شد(به این خاطر از دوستان عذرخواهی می کنم). dll نسخه اصلی رو در کنار برنامه قرار دادم مجددا آپلود کردم(می تونید از همون لینک قبلی؛ نرم افزار رو دانلود کنید)



    نوشته شده توسط مجتبی صحرائی در شنبه سی ام مهر 1390 و ساعت 5:55  

    فرض کنید می خواهید از کنترل TreeView به همراه MS Ajax استفاده کنید و آیتم ها و شاخه های TreeView زیاد بوده بطوریکه باعث می شود Container این کنترل دارای اسکرول شود.

    در هنگام فرض کنید اسکرول را پائین آورده اید و روی یکی از آیتم های TreeView کلیک می کنید، پس از اتمام مراحل مورد نظرتان خواهید دید که اسکرول در جایی که شما قرار دادید باقی نمانده و بالا رفته است یعنی نمی تواند محل قرار گیری اسکرول را حذف نماید.

    برای رفع این مشکل می باید نقطه قرار گیری اسکرول را در شروع درخواست ذخیره نموده و در پایان درخواست موقعیت اسکرول را برابر مقدار ذخیره شده قرار دهید.

    پیاده سازی

    برای پیاده سازی این مورد همانگونه که ذکر شد می باید در ابتدای درخواست موقعیت اسکرول را ذخیره نمائید که این کار را می توانید با رجیستر کردن تابعی در هندلر add_beginRequest کتابخانه MS Ajax انجام دهید و همچنین در پایان درخواست موقعیت اسکرول را برابر با مقدار ذخیره شده قرار دهید که این کار را نیز می توانید با رجیستر کردن تابعی در هندلر add_endRequest کتابخانه MS Ajax انجام دهید.

    1- کنترل ScriptMannager را به فرم خود اضافه نمائید

    2- یک کنترل UpdatePanel به صفحه اضافه نمائید و در ContentTemplate آن تگ Div ای با نام leftBar و کنترل TreeView را نیز درون تگ Div قرار دهید

    1. <div id="leftBar">
    2.     <asp:TreeView ID="tvEmployees" runat="server" ImageSet="Contacts" OnSelectedNodeChanged="tvEmployees_SelectedNodeChanged">asp:TreeView>
    3. div>

    2- کدهای مربوط به پرشدن آیتم های TreeView را نیز بنویسید

    3- کدهای جاوااسکریپت زیر را نیز به انتهای صفحه خود تزریق نمائید



    1. <script type="text/javascript">
    2.  
    3.     var scrollTop;
    4.  
    5.     Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);
    6.     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
    7.  
    8.     function BeginRequestHandler(sender, args) {
    9.         var elem = document.getElementById('leftBar');
    10.         scrollTop = elem.scrollTop;
    11.     }
    12.  
    13.     function EndRequestHandler(sender, args) {
    14.         var elem = document.getElementById('leftBar');
    15.         elem.scrollTop = scrollTop;
    16.     }      
    17.    
    18. script>


    نوشته شده توسط مجتبی صحرائی در یکشنبه بیست و چهارم مهر 1390 و ساعت 17:20