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

شرکت نرم افزاری هوش و دانش سپهر به مدیریت آقای وحید عباس زاده جهت تکمیل کادر برنامه نویس شرکت، از علاقمندان به برنامه نویسی در حوزه وب دعوت به عمل می آورد.

علاقمندان به همکاری می توانند توسط یکی از روش های زیر رزومه خود را برای بررسی ارسال کنند:

1- تکمیل فرم آنلاین و ارسال رزومه با مراجعه به آدرس http://hooshodanesh.com/Job

2- ارسال رزومه کاری به ایمیل بنده به آدرس های mojtaba_sahraei[at]yahoo.com و یا mojtabasahraei[at]gmail.com

در صورتیکه از روش 2 استفاده می کنید، ایمیل های خود را با عنوان رزومه ارسال کنید

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



نوشته شده توسط مجتبی صحرائی در چهارشنبه سی و یکم اردیبهشت ۱۳۹۳ و ساعت 22:21  

چند روز پیش تصمیم گرفتم از ASP.NET FriendlyUrls برای سفارشی کردن Url های سایت استفاده کنم

وقتی در لوکال تست میکردم همه چیز درست بود و بدون مشکل کار میکرد اما به محض اینکه سایت رو روی سرور Publish کردم و قصد پیمایش بین صفحات رو داشتم، با کلیک بر روی منوها با خطا 404 not found مواجه میشدم!

پس از کمی بررسی متوجه شدم که باید اسمبلی System.Web.Optimization.dll رو به وب سایت اد کنم و چند خط کد به web.config سایت اضافه کنم.

1- برای اضافه کردن System.Web.Optimization.dll به سایت روی References کلیک راست کنید و گزینه Manage Nuget Packages رو انتخاب کنید و سپس با جستجوی عبارت optimize از آیتم های پیدا شده Microsoft ASP.NET Web Optimization Framework رو نصب کنید.

 

 

 

2- خطوط زیر رو به web.config سایت اضافه کنید

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="BundleModule" />
<add name="BundleModule" type="System.Web.Optimization.BundleModule" />
modules>
system.webServer>
 
با این تغییرات ایراد ASP.NET FriendlyUrls برطرف شد

برچسب‌ها: ASP, NET, Optimization, NET FriendlyUrls

نوشته شده توسط مجتبی صحرائی در دوشنبه دهم تیر ۱۳۹۲ و ساعت 13:33  

AnonymousType ها با شما این امکان رو میدهند که بدون ساخت Type جدیدی چندین پراپرتی رو در یک object قرار بدید و از اون استفاده کنید.

به مثال زیر توجه کنید:

var v = new { Amount = 108, Message = "Hello" };
Console.WriteLine(v.Amount + v.Message);

دقت داشته باشید که در این مثال Typeی بنام V از قبل ساخته نشده بود و فیلد های Amount,Message هم وجود ندارند اما با استفاده از AnonymousType ها این امکان فراهم شده تا بتونید بدون ساخت Type، رفتار Type ها رو شبیه سازی کنید

بطور مثال فرض کنیم می خواهیم نام و شناسه پرسنل رو در یک ComboBox نمایش دهیم. برای این منظور نیازی نیست که تمام فیلد های مربوط به پرسنل را بازیابی نموده و تنها نام و شناسه پرسنل را نمایش دهیم و همانطور که بسیاری از شما می دانید تنها نام و شناسه پرسنل را با استفاده از AnonymousType بازیابی می کنیم =>

var business = new Customers();
var modelsCollection = business.GetAll(w => w.MCode);
cmbCustomerName.DataSource = modelsCollection.Select(w => new { w.CustomerName, w.Code }).ToList();
چنانچه از modelsCollection فیلد و یا فیلدی را انتخاب نمی کردید و از تمام فیلد ها استفاده می کردید برای دریافت آیتم انتخاب شده مشکلی نداشتید و با یک Cast ساده به Model Type مورد نظر می توانستید مقدار شناسه پرسنل انتخابی را بدست آورید
اما با این قطعه کد چنانچه بخواهید به Model Type مورد نظرتون عمل Casting رو انجام بدید با خطا مواجه خواهید شد چون Type جدید از نوع  AnonymousType می باشد و شامل دو فیلد CustomerName,Code می باشد.
سوالاتی که پیش خواهد آمد:
1- مقدار Code رو چطور استخراج کنیم؟
2- AnonymousType یک Type موجود در کدها نیست که بتوان آیتم انتخابی را به آن Cast نموده و مقدار Code را دریافت نمود!
.
.
.
راه حل استفاده از Reflection می باشد و استفاده از تابع زیر پیشنهاد میشه=>
public static T GetValueFromAnonymousType<T>(object dataitem, string itemkey)
	{
		Type type = dataitem.GetType();
		T itemvalue = (T)type.GetProperty(itemkey).GetValue(dataitem, null);
		return itemvalue;
	}
 
با استفاده از این تابع براحتی خواهید توانست مقدار Code را بدست بیاورید =>
int code = GetValueFromAnonymousType<int>(cmbCustomerName.SelectedItem, "Code");
 
این یک مثال از نوع های بی نام بوده و تحت هر شرایطی که نیاز به دریافت مقدار از یک نوع بی نام باشید می توانید به همین ترتیب عمل کنید


نوشته شده توسط مجتبی صحرائی در شنبه هجدهم خرداد ۱۳۹۲ و ساعت 18:38  

چند روز پیش وقتی مجددا ASP.NET MVC4 Beta رو نصب کردم با تعجب دیدم که Intellisense در پروژه ASP.NET MVC3 یا کار نمی کنه یا ناقص کار می کنه بطوریکه زیر متدهای  ActionLink و یا Partial خط قرمز کشیده می شد و Intellisense اون ها رو نمی شناخت

مشخص بود که تداخلی اتفاق افتاده و Intellisense نمی تونه کلاس ها و متدها رو شناسایی کنه.

راه حل برطرف نمودن این مشکل این هستش که باید در وب کانفیگ خودتون تغیراتی بدید و نسخه webpages خودتون رو به صراحت ذکر کنید.

برای این کار در تگ appSettings، تگ زیر رو بنویسید=>

  1. <add key="webpages:Version" value="1.0.0.0" />

با توجه به مقادیر پیش فرض تگ appSettings، محتویات تگ مورد نظر می باید به صورت زیر باشه=>

  1. <appSettings>
  2.     <add key="ClientValidationEnabled" value="true"/>
  3.     <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
  4.     <add key="webpages:Version" value="1.0.0.0" />
  5. appSettings>

در انتها یک بار VS رو ببندید و مجددا باز کنید



نوشته شده توسط مجتبی صحرائی در دوشنبه شانزدهم مرداد ۱۳۹۱ و ساعت 8:40  

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

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

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

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

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



نوشته شده توسط مجتبی صحرائی در یکشنبه دهم اردیبهشت ۱۳۹۱ و ساعت 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>


نوشته شده توسط مجتبی صحرائی در سه شنبه بیست و دوم آذر ۱۳۹۰ و ساعت 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" />

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




نوشته شده توسط مجتبی صحرائی در چهارشنبه هجدهم آبان ۱۳۹۰ و ساعت 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.         }



نوشته شده توسط مجتبی صحرائی در سه شنبه هفدهم آبان ۱۳۹۰ و ساعت 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


  • نوشته شده توسط مجتبی صحرائی در سه شنبه دهم آبان ۱۳۹۰ و ساعت 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.


  • نوشته شده توسط مجتبی صحرائی در سه شنبه دهم آبان ۱۳۹۰ و ساعت 18:14