Thursday, March 20, 2014

Cloud CMS (cms4biz.com )

I'm proud to announce that our centralized cloud CMS is launched and ready to use. Some of the basic features of our CMS are:
  • Unlimited page, sub page 
    (Drop-down menu, List page, External Link​)
  • Online theme (design) editor 
    (Unique feature presented by CMS4BIZ)
  • Content versioning
  • Rich text editing for content pages
  • Integration with Google Analytics
  • Site map, Bread crumb, photo gallery
  • Daily Information & Database backup
  • SEO friendly URLs
  • Social share tools for each page
  • RSS feeds
  • Integration with social networks pages

399 $AUD

  • Custom design+ 200 AUD
  • ​Object based pages + 100 AUD
    (Unique feature presented by CMS4BIZ)

Monday, July 22, 2013

Export Html to Excel using C - کد سی شارپ انتقال اچ تی ام ال بصورت اکسل

یکی از راحتترین کدهایی که برای تبدیل HTML به خروجی Excel وجود داره: کافیه شما کد Html خودتون رو بتونید توی یک متغیر ذخیره کنید ( در اینجا نام متغیر output می باشد و form1 نیز نام فرم اصلی صفحه می باشد )
نام فایلی که دانلود می شود print.xls است که در خط دوم ذکر شده است


Thursday, October 04, 2012

خطای Collation هنگام مقایسه دو فیلد متفاوت در MSSQL

داشتم کوئری زیر را اجرا می کردم که نام پروژه های استفاده نشده را در جدول دوم بدست بیاورم:  
select ProjectCode from table1
where ProjectCode not  in (select  ProjectCode  from table2)

که با خطای زیر مواجه شدم : 
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

اشکال اینجاست که فیلد ProjectCode در جدول اول از Collate یا نوع انطباق SQL_Latin1_General_CP1_CI_AS  و در جدول دوم از Collate  یا نوع انطباق  Latin1_General_CI_AS  است.

Collate  یا Collation چبست ؟ 
در SQL برای ذخیره رشته ها از روشهای متفاوتی استفاده می شود تا برای ایندکس و جستجوی آنها به کارایی بهتری رسید. به این روشها Collate می گویند . شما حتی اگر یک فیلد را با نوع مثلا nvcarchar ذخیره کرده باشید ولی با Collate متفاوت ، نمی توانید آنها را بدون تبدیل کردن مقایسه کنید. 
برای مقایسه فیلدهای با Collate متفاوت از تبدیل زیر استفاده کنید: 

select  FILEDNAME collate COLLATENAME from TABEL

مثال گفته شده در اول این مقاله به صورت زیر قابل اجراست :
select ProjectCode from table1
where ProjectCode not  in
(select  ProjectCode collate SQL_Latin1_General_CP1_CI_AS from table2)

مقاله کاملی در این باره همراه با مثال در آدرس زیر می توانید بخوانید : 




Tuesday, December 13, 2011

دهها قطعه کد کاربردی بسیار مفید در سایت css-tricks

دهها قطعه کد کاربری بسیار جالب در زمینه HTML ، CSS ، JQuery ، Javascript ، PHP ، WordPress و... در این صفحه وجود دارد. بسیار ساده ، کاربردی و مفید
کلا سایت به قول معروف خفنی است این css-tricks ، همه صفحاتش آموزنده و کاربری و کاملا بروز است. در بین کدها این کد را پیدا کردم که یاد قدیما افتادم. "نوستالژی برنامه نویسی (:   "
<meta http-equiv="refresh" content="5;url=http://example.com/" />
فوروارد صفحه بعد از 5 ثانیه به مسیر دیگر

Friday, December 09, 2011

چگونه در یک فرم MVC مانع حملات از نوع CSRF شویم؟

هنگامی که در MVC فرمی را برای عملیاتی مثل ذخیره سازی یا ویرایش به سرور ارسال می کنید، در صورتی که کاربر در فرم از تگهای Html یا کدهای JavaScript  استفاده کرده باشد ، کنترلر بصورت پیش فرض آن تگ یا کد را خطرناک تشخیص می دهد و خطای زیر را ارسال می کند :

A potentially dangerous Request.Form value was detected from the client

حتی اگر کد Html شما خطرناک هم نباشد ، باز هم این خطا داده می شود، مثلا در شکل زیر تنها یک تگ B وجود دارد که متن را توپر می کند ولی باز هم خطا صادر می شود :






این خطا از لحاظ امنیتی به ما کمک می کند تا جلو کدهای احیانا مخربی را که هکرها وارد می کنند ، بگیریم ولی گاهی اوقات لازم است که ما کد Html را دریافت کنیم ، مثلا اگر شما می خواهید به کاربر اجازه درج محتویات یک صفحه خبر و یا ارسال یک ایمیل را بدهید که معمولا یک ویرایشگر متنی در اختیار کاربر قرار می گیرد که کد html تولید می کند

برای حل این مشکل از عبارت  (ValidateInput(false استفاده می شود که باعث می شود ، اعتبارسنجی روی تگهای Html یا کدهای دریافت شده صورت نگیرد. در این حالت کنترلر بصورت زیر در می آید:


  [ValidateInput(false)]
        public ActionResult NewEmail(FormCollection form)
        {
اما با اینکار عملا راه را برای حمله های امنیتی از نوع Cross Site Request Forgery باز کرده ایم . این حمله ها به این صورت انجام می شود که هکر با ارسال فرمی که خودش ساخته است و قرار دادن کدهایی در آن ،  باعث ربوده شدن اطلاعاتی مثل Session از کامپیوتر کاربر می شود .

برای پیشگیری از این نوع حملات شما باید یک token از نوع encrypted تولید می کند که تنها توسط کنترلر قابل اعتبار سنجی است . بنابراین شما در ابتدای فرم خود ،  آن token را بصورت زیر تولید می کنید  :
 @using (Html.BeginForm("NewEmail""Emails"FormMethod.Post))
    {
        @Html.AntiForgeryToken()
و سپس در کنترلر خود آن را با عبارت [ValidateAntiForgeryToken] بررسی می کنید تا مطمئن شوید که مقادیر این فرم توسط برنامه خود شما تولید شده است. 

  [ValidateAntiForgeryToken]
        [ValidateInput(false)]
        public ActionResult NewEmail(FormCollection form)
        {

Thursday, December 08, 2011

Monday, November 21, 2011

ویژگی Name در عناصر Html هنوز مهم است.

چند روز پیش برای فراخوانی یک تابع با استفاده از Ajax در MVC و آپدیت کردن بخشی از صفحه به این مسئله برخورد کردم که به نظر می رسید Ajax.BeginForm هیچ مقداری را به سرور ارسال نمی کند:
// View




// Controller


بعد از کمی کار خسته شدم و این سئوال را در StackOverFlow پرسیدم که متاسفانه هیچ جواب مثبتی نگرفتم و حتی جوابهای گمراه کننده ، نظیر این " Ajax.BeginForm خیلی دردآور (بد قلق) است. " نیز دریافت کردم. تا اینکه بر حسب اتفاق متوجه شدم که برای عناصر Html صفحه فقط ویژگی id تعریف کرده ا م و ویژگی قدیمی name را فراموش کرده ام. خیلی جالب بود که با اضافه کردن آن مساله حل شد! خیلی ساده اما وقت گیر. هر دو ویژگی id و name لازم هستند: