تبليغاتX
ASP.NET 3.5 and AJAX

در این قسمت می خواهیم یک وب سایت برای لیگ برتر فوتبال طراحی کنیم!! در خلال کار نکات اصلی MVC را مرور می کنیم. پروژه ای که می خواهیم انجام دهیم مانند شکل ذیل است:

مرحله اول: ایجاد پروژهیک پروژه جدید از نوع ASP.NET MVC 4 Application با نام Premier League (لیگ برتر) ایجاد کنید:

الگوی پروژه را Empty انتخاب کرده و Razer و HTML 5 را انتخاب کنید

مرحله دوم: ایجاد دیتابیسبر روی پوشه App_Data کلیک راست کرده و گزینه Add> New Item را برگزیده و یک بانک اطلاعات SQL Server با نام PremierLeagueDB.mdb به پروژه خود بیافزایید.

در پنجره Database Explorer اتصال مربوط به PremierLeagueDB.mdb را باز کرده بر روی پوشه Tabels کلیک راست کرده و با انتخاب Add New Tabel جدول های مورد نظر را مانند شکل ذیل ایجاد کنید:

البته شما همه استاد بنده هستید و نیاز به توضیح چگونگی ایجاد جدول ندارید؛ اما برای مبتدیانی چون من این توضیح را می دهم: ابتدا هر دو جدول را مطابق شکل بالا ایجاد کرده و سپس ارتباط میان دو جدول را با استفاده از شکل ذیل ایجاد کنید:

بدین صورت که: در حالی که طراح جدول دوم باز است بر روی دکمه Relationship در نوار ابزار کلیک کرده، در پنجره بعدی بر روی دکمه Add کلیک کرده سپس بر روی Tables And Columns Specification کلیک کنید تا دکمه کوچک کنار آن هویدا شده و با کلیک بر روی این دکمه، پنجره بعدی برای تعیین جدول والد و فرزند و نیز تعیین کلید اصلی و خارجی نمایان می شود که مطابق شکل آن را انجام دهید.
مرحله سوم: ایجاد کلاس Entitity Framework برای کار با داده هابرای کار با بانک اطلاعات مذکور، می خواهیم یک کلاس Entitity Framework در پوشه Models ایجاد کنیم؛ برای این کار دو روش وجود دارد:
روش اول استفاده از ویژوال استودیو است؛ بدین منظور بر روی پوشه Models کلیک راست کرده و با انتخاب Add>New Item از قسمت Data یک Entitity Framework با نام PremierLeague.edmx ایجاد کنید (شکل بعد)

در صفحه بعد گزینه From Database را انتخاب کنید؛ در پنجره بعدی برروی دکمه New Connection کلیک کرده و در پنجره بعدی با انتخاب Microsoft SQL Server Database File و کلیک دکمه Browse فایل دیتابیس خود (PremierLeagueDB.mdb) را انتخاب کنید. (البته در این پنجره شما می توانید بانک اطلاعات SQL Server یا با گزینش از دیگر بانک های اطلاعاتی مانند اکسس استفاده کنید). با این کار رشته اتصال ساخته شده و در فایل Web.config ذخیره می شود.

با کلیک دکمه Next به پنجره بعدی رفته و صبر کنید تا لیستی از اشیای دیتابیس نشان داده شود؛ جعبه انتخاب Tables را انتخاب کنید (شکل ذیل)

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

روش دوم: استفاده از کد نویسی است؛ در این روش با استفاده از کمی کد نویسی می توانیم کلاس های مورد نظر خویش را بنویسیم. از آنجا که این روش کنترل بیشتری به ما می دهد و نیز به خاطر جنبه آموزشی داشتن، ما در اینجا از این روش استفاده می کنیم.
پس بر روی این پوشه کلیک راست کرده و با انتخاب Add> Class یک کلاس با نام PremierLeagueDB.cs ایجاد کنید. در اینجا چند نکته را مد نظر داشته باشید:
اول این که: کلاس شما باید از DbContext مشتق شده باشد (ارث ببرد):

public class PremierLeagueDB : DbContext
{
}
دوم این که: فضانام های ذیل اگر وجود ندارد، به آن بیافزایید:
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
اکنون کلاس مربوط به تیم را این گونه بنویسید:
public class Team
{
   [Key]
   public int TeamID { get; set; }
   public string TeamName { get; set; }
   public DateTime RegisterDate { get; set; }
   public virtual ICollection Player { get; set; }
}
سطر اخیر برای ایجاد ارتباط یک-به-چند میان کلاس Team و Player می باشد.
نکته: برای تایپ سریع تر در ویژوال استودیو، کلمه prop را نوشته و دوبار کلید Tab را فشار دهید.
اکنون کلاس مربوط به بازیکنان را این گونه بنویسید:
public class Player
 {
    [Key]
    public int PlyerID { get; set; }
    public int TeamID { get; set; }
    public string FullName { get; set; }
    public int Age { get; set; }
    public DateTime EnrollDate { get; set; }
    public virtual Team Team { get; set; }
 }
در اینجا نیز سطر اخیر برای ایجاد ارتباط میان دو کلاس است.
حال کلاس PremierLeagueDB خود را اینگونه اصلاح کنید:
public class PremierLeagueDB : DbContext
{
  public DbSet Teams { get; set; }
  public DbSet Players { get; set; }
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
    modelBuilder.Conventions.Remove();
  }
}
اعتبارسنجی داده ها با Data Annotationsبرای اعتبارسنجی و بررسی صحت داده های ورودی، در MVC از الگوی Data Annotations استفاده می شود. در این روش، هنگام ایجاد یک Property، یک یا چند برچسب Attribute به آن اضافه می کنیم که نشان دهد این فیلد الزامی است و Null نباید باشد، نوع داده و محدوده مقادیر فیلد و دیگر مشخصات آن را کنترل می کنیم. در این جا به چند مورد ضروری اشاره می کنیم:
Required: این برچسب مشخص می کند که فیلد الزامی است و نمی تواند مقدار تهی داشته باشد؛ همچنین می توان یک پیام خطای دلخواه را تعیین کرد. مثال:
[Required(ErrorMessage = "نام تیم الزامی است")]
public string TeamName { get; set; }
StringLength: برای تعیین طول رشته. به طور مثال نام کامل بازیکن نباید از 50 کاراکتر بیشتر باشد:
[StringLength(50, ErrorMessage = "نام بازیکن نباید بیش از 50 کاراکتر باشد")] 
public string FullName { get; set; }
RegularExpression: برای اعتبارسنجی فیلد با استفاده از عبارات با قاعده. به طور مثال می توان صحت ایمیل را این گونه اعتبارسنجی کرد:
[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}"),
    ErrorMessage = "ایمیل معتبر نیست")]
public string Email { get; set; }
Range: برای تعیین محدوده مقادیر مجاز برای یک فیلد؛ به طور مثال سن بازیکن باید بین 16 تا 38 سال باشد:
[Range(16,38)]
public int Age { get; set; }
DataType: برای تعیین نوع داده فیلد؛ به طور مثال، فیلد تاریخ استخدام بازیکن باید از نوع Date باشد:
[DataType(DataType.Date,ErrorMessage = "فرمت تاریخ صحیح نمی باشد")]
public DateTime EnrollDate { get; set; }
شما می توانید با آنچه آموختید، دو کلاس Team و Player را برای اعتبارسنجی داده های ورودی، اصلاح نمایید.
اکنون بهتر است پروژه خود Build کنید.
مرحله چهارم: ایجاد Controllerهاتا کنون ما کلاس های Model خود را (که به نوعی لایه Data Access است) ایجاد کردیم. این کلاس ها همه نیازهای ما را برای کار با پایگاه داده مان برآورده می کند.
حال می خواهیم کنترلرهای مورد نیاز را ایجاد کنیم. بدین منظور بر روی پوشه Controller کلیک راست کرده و گزینه Add>Controller را انتخاب کرده و در پنجره بعدی نام آن را HomeController گذاشته و Template آن را نیز Empy template انتخاب کنید (در مورد این Templateها بعدا توضیح خواهم داد).

بر روی دکمه Add کلیک کنید تا یک کنترلر که شامل یک متد با نام Index() است، ایجاد شود. کد داخل این کنترلر این گونه است:
public class HomeController : Controller
{
  //
  // GET: /Home/
  public ActionResult Index()
  {
     return View();
  }
}
متدهایی که در کنترلرها می نویسیم، غالبا شیئ از نوع ActionResult بر می گرداند که به برنامه می گوید باید کاری انجام داده و نتیجه را بر گرداند. البته شما می توانید چیزهای دیگری از این متدها بخواهید؛ به طور مثال، متد بالا را این گونه می توانید بنویسید:
public string Index()
{
   return "Hello, Welcome to MVC!";
}
به هر حال، شما فعلا این سطر را قبل از return view() اضافه کنید:
ViewBag.Message = "به سایت لیگ برتر خوش آمدید!";
متد مذکور یک View بر می گرداند که باید آن را ایجاد کنیم؛ بدین منظور بر روی متد Index() کلیک راست کرده و گزینه Add View را انتخاب کنید. در پنجره Add View نام ویو، دستور زبان (که می تواند Razer یا ASPX باشد) و نیز گزینه Use a layout را مشخص می کنید.

در مورد دستور زبان Razer در قسمت بعدی توضیح خواهم داد.
اما Layout در واقع همان MasterPage در صفحات ASP.NET کلاسیک است. بدین معنی که ما قسمت های مشترک صفحات (مانند هیدر، فوتر، منو و...) را در داخل فایل Layout قرار می دهیم. هنگام ایجاد یک پروژه، پوشه ای با نام Shared همراه با یک فایل _Layout.cshtml ایجاد می شود. همچنین در فایل _ViewStrart.cshtml مشخص می کند که Layout پیش فرض، کدام است. بنا بر این لازم نیست در پنجره Add View با کلیک دکمه ... فایل Layout را انتخاب کنید؛ کافی است جعبه انتخاب Use a layout انتخاب شده باشد.
برای فهم بهتر Layout شکل ذیل را نگاه کنید:

به هر حال، با این کار، یک View ساده با نام Index ایجاد می شود. بهتر است برای تست، عبارت 

Index

را با

@ViewBag.Message

جایگزین کنید. این سطر همان پیام را که در کنترلر در متغیر ViewBag.Message ذخیره کرده بودیم، نمایش می دهد.
مرحله پنجم: قالب گرافیک سایتقالب گرافیکی این سایت ساده است؛ مقدار دستورهای css در فایل Site.css که در پوشه Content قرار دارد، نوشته ایم؛ شما می توانید قالب دلخواه خود را طراحی کنید؛ دستوراتی که من نوشته ام این گونه است:
body
{
  padding: 0;
  margin: 0;
  direction: rtl;
  background-color: #e6e7e9;
  font-family: Tahoma;
  font-size: 10pt;
  line-height: 100%;
}
/* Styles for main DIV  --------------------------- */
.main
{
  width: 800px;
  margin: 0 auto;
  margin-top: 20px;
  margin-bottom: 20px;
  border-radius: 10px;
  background: #ffffff;
  border: 1px solid #b4bbc3;
}
/* Styles for HEADER --------------------------- */
.header
{
  background: #d4d7df;
  padding: 10px;
  border-radius: 9px 9px 0 0;
}
/* Styles for MENU  ---------------------------*/
.menubg
{
  border-top: 1px solid #646777;
  border-bottom: 1px solid #646777;
}
.menu
{
  width: 800px;
  height: 20px;
  margin: 0;
  padding: 0;
  background: #646777;
  border-top: 1px solid #ffffff;
  border-bottom: 1px solid #ffffff;
  list-style: none;
  display: block;
}
.menu li
{
  float: right;
  border-left: 1px solid #336666;
  padding: 3px 0px;
}
.menu li a
{
  padding: 3px 16px;
  border-left: 1px solid #dddddd;
  color: #d4d7df;
  text-decoration: none;
}
.menu li a:hover
{
  background-color: #000033;
}
/* Styles for CONTENT DIV --------------------------- */
.content
{
  padding: 20px;
}
/* Styles for TABLE (CSS3) --------------------------- */
th
{
  font-weight: bold;
  background-color: #dadada;
}
div.AltRow
{
  border:1px solid #dadada;
}
div.AltRow tr:nth-child(odd)
{
  background-color: #ffffff;
}
div.AltRow tr:nth-child(even)
{
  background-color: #efefef;
}
div.AltRow tr:hover
{
  background-color: #dadada;
}
/* Styles for validation helpers  ---------------------------*/
.field-validation-error
{
  color: #ff0000;
}
.field-validation-valid
{
  display: none;
}
.input-validation-error
{
  border: 1px solid #ff0000;
  background-color: #ffeeee;
}
.validation-summary-errors
{
  font-weight: bold;
  color: #ff0000;
}
.validation-summary-valid
{
  display: none;
}
اکنون فایل _Layout.cshtml را باز کرده و آن را مشابه ذیل اصلاح کنید:
  
  
  @ViewBag.Title
  
  
  


  


این کد، شامل کدهای HTML و مقداری کد Razer است که در بخش بعدی به آن می پردازیم. انشاء الله.
تا اینجای کار قدم های اولیه را برداشته ایم و پروژه ما آماده است برای کار با داده ها و بانک اطلاعات. بد نیست پروژه را تست کنید تا شکل مشابه ذیل را مشاهده کنید:


داغ کن - کلوب دات کام

نوشته شده در  90/11/28ساعت 12:44  توسط آرش وهابی  | 

آموزش نکات کاربردی ASP.NET MVC 4 (قسمت اول)در این سلسله مقالات قصد ندارم آموزش گام به گام MVC را دنبال کنم؛ خوشبختانه منابع خوبی هم به زبان انگلیسی و حتی به زبان فارسی (مانند مقالات آقای امیر مددی در 30sharp.com یا کتاب آموزش کاربردی آموزش کاربردی ASP.NET MVC 2 از آقای مرتضی پورمحمد) وجود دارد که شما می توانید به آن ها مراجعه کنید. من می خواهم به نکات کاربردی و مفید این تکنولوژی که معمولا در طراحی سایت و پروژه ها به آن ها نیاز داریم، بپردازم. اما قبل از هرچیز یادآوری چند نکته را لازم می دانم:

نکته اول: MVC چیست؟در این مورد سخن زیاد گفته شده؛ به طور خلاصه: MVC (مخفف Model-View-Controler) الگوی نوینی از پروژه های ASP.NET است که در آن، بخش های مختلف یک اپلیکشن به خوبی و با یک استاندارد ویژه ساماندهی شده است. همچنین MVC از نسخه 3 به بعد با دستور زبان (syntax) جدید به نام Razer همراه شد که مزایای فراوانی دارد.
برای درک معماری MVC شکل ذیل را ببینید:

همان گونه که شکل می گوید: در معماری MVC کاربر آدرسی (URL) را وارد می کند؛ این تقاضا به یک متد در داخل یک کلاس کنترلر فرستاده می شود (در روش معمول، URL ها به یک فایل html, aspx, php و غیره هدایت شده و سرور آن فایل را پردازش کرده نتیجه را بر می گرداند). سپس کنترلر به کلاس های مدل مراجعه می کند؛ مدل، داده های مورد نیاز را از منبع داده خوانده و به کنترلر تحویل می دهد (یا داده ها را در منبع داده نوشته و نتیجه را بر می گرداند). آنگاه کنترلر، ویو متناسب را به کاربر برمی گرداند.

نکته دوم: آیا حتما باید MVC را انتخاب کنم؟از این سوال طبیعی نباید سرسری گذشت؛ آن گونه که مایکروسافت می گوید، MVC جایگزین ASP.NET کلاسیک نیست؛ بلکه در کنار آن به عنوان راه حل جدید مطرح است. اما کارشناسان معتقدند MVC به خاطر مزایایی (و مزه ای!!!) که دارد، عملا جایگزین آن خواهد شد.
البته در مورد مزایا و معایب MVC نیز سخن فروان است؛ به عقیده من به خاطر:
* سرعت بالاتر نسبت به ASP.NET کلاسیک و صفحات سبک تر (به خاطر حذف ViewState و دیگر بهبودها)
* ساماندهی خوب پروژه و جداسازی قسمت ها و لایه ها (که هم امکان کار گروهی را راحت می کند و هم خود شما هر وقت که لازم باشد، به آسانی بخش های مورد نظر را بازبینی و اصلاح کنید).
* تعامل و درهم آمیختن با تکنولوژی های روز (مانند HTML5, CSS3, Jqury و...)
* دستور زبان Razer که به آسانی با تگهای HTML ترکیب می شود (مشابه PHP)
* و دلایل متعدد دیگر ...
حتما باید با MVC کار کرده و کم کم ASP.NET کلاسیک را فراموش کنید. (هرچند کسانی که مزه MVC را چشیده اند عملا نسبت به آن علاقه و تعصب پیدا می کنند!!)

نکته سوم: برای کار با MVC به چه چیزهایی نیاز دارید؟ابتدا باید نسخه 4 ام وی سی را از آدرس زیر دانلود کرده و نصب کنید
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27419
طبیعی است که باید Vusual Studio 2010 sp1 یا Visual Studio 11 (نسخه کامل یا Exprees) که به تازگی انتشار یافته است را نصب کرده باشید.
راه دیگر استفاده از WebMatrix است که از سایت asp.net می توانید این پلاتفرم کارا و سبک را به راحتی دانلود کنید. خوشبختانه نسخه 2 این نرم افزار که به تازگی منتشر شده، از Intellecence هم پشتیبانی می کند؛ شکل ذیل را ببینید:

به هر حال، من از نسخه Visual Studio 2010 Express sp1 استفاده می کنم.

نکته چهارم: مروری بر یک پروژه MVC1- ویژوال استودیو را اجرا کرده و یک پروژه جدید از نوع ASP.NET MVC 4 Web Application مانند شکل ذیل انتخاب کرده و نامی دلخواه برای آن انتخاب کنید (شکل ذیل).

2- پس از کلیک بر روی دکمه OK پنجره ذیل را می بینید:

در این شکل چند نکته قابل توجه است: اول این که یک الگوی جدید به نام Mobile Application را مشاهده می کنید که شامل الگویی کم حجم و سازگار با مرورگرهای همراه می باشد (از جمله کتابخانه جدید Jquery Mobile). دوم اینکه باید View engine خود را انتخاب کنید که می تواند Razer یا ASPX باشد. همچنین HTML 5 به صورت پیش فرض انتخاب شده است. با کلیک بر روی دکمه OK ویژوال استودیو پروژه را ایجاد می کند. (شکل ذیل)

همان گونه که در شکل مشاهده می کنید، در یک پروژه MVC علاوه بر پوشه های معمول ASP.NET (مانند Properties, References, App_Data) شامل پوشه های ذیل است:
Content: در این پوشه محتویات غیر دینامیک مورد استفاده در سایت مانند استایل ها، تم ها و... نگهداری می شود.
Controllers: در این پوشه کلاس هایی قرار می گیرد که وظیفه مدیریت برنامه را به عهده می گیرد؛ بدین معنی که در هر کلاس متد یا متدهایی نوشته می شود که به کاربر پاسخ داده، داده ها را از Model می گیرد و View مناسب را به کاربر تحویل می دهد.
Image: برای تصاویر مورد استفاده در اپلیکیشن.
Model: شامل کلاس هایی برای کار با داده ها.
Scripts: شامل فایل های JavaScript که به طور پیش فرض کتابخانه Jquery، Modernizer (پلتفرمی برای مرورگرهایی که از HTML 5 و CSS 3 پشتیبانی نمی کنند) و... می باشد.
Views: شامل نماها که فایل هایی با پسوند cshtml (یا vbhtml) بوده و بخش رابط کاربری (UI) اپلیکیشن را می سازد. برای ساماندهی بهتر نماها، برای هر کلاس به طور معمول یک پوشه جداگانه ایجاد می کنیم. همچنین در این پوشه یک پوشه به نام Shared وجود دارد که شامل اجزای مشترک رابط کاربری مانند Layout (که در ASP.NET کلاسیک MasterPage نامیده می شد).
توجه داشته باشید که یک فایل Web.config در این پوشه نیز وجود دارد که برای تنظیمات نماها و جلوگیری از پردازش فایل های این پوشه توسط IIS است (نماها به طور مستقیم توسط کاربر مورد دسترسی قرار نمی گیرد؛ بلکه توسط کنترلرها پردازش می شود).
اکنون در فایل HomeController.cs (که به طور پیش فرض باز است)، پیامی را همانند ذیل نوشته و برنامه را تست کنید:
public ActionResult Index()
    {
      ViewBag.Message = "This is my first MVC 4 test!";
      return View();
    }

همان گونه که در شکل نیز مشخص است، قالب پیش فرض صفحه در MVC 4 با MVC 3 متفاوت است؛ در این قالب بهبودهایی در THML و CSS افزوده شده و همچنین لینک های Register و Login در صفحات جداگانه باز نمی شود؛ بلکه به صورت یک پنجره Modal نمایان می شود.
در این قسمت به معرفی اجمالی MVC پرداختیم. از قسمت بعدی می خواهیم یک پروژه عملی را برنامه نویسی کنیم تا در خلال آن تمام نکات مورد نیاز برای کار با MVC را فراگیریم. انشاء الله

منبع : فکرنو داتکام


برچسب‌ها: Asp, net, net mvc, MVC, model view controler
داغ کن - کلوب دات کام

نوشته شده در  90/10/28ساعت 1:35  توسط آرش وهابی  | 

همانطور که می دانید SQL زبان ساخت یافته Query یا تقاضا از بانک اطلاعاتی می باشد ، در همین راستا شرکت مایکروسافت در ورژن 3 به بعد دات نت کتابخانه ای به نام LINQ به فضا نام های خود افزوده است

LINQ (لینک) مختصر کلمه Language INtegrated Query  بوده و  یک زبان برای تقاضا از هر گونه مجموعه داده (بانک اطلاعاتی ، آرایه ها ، Xml و...) می باشد . این زبان بسیار شبیه زبان SQL بوده و با زبان های C# و Vb.NET قابل پیاده سازی است .

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

LINQ بسیار مورد پسند توسعه دهندگان وب به وِیژه دوست داران XML قرار گرفت ، شما به وسیله این زبان قادرید به همان سادگی که از  پایگاه داده تقاضا می کنید از یک ساختار XML  یا یک Object نیز تقاضا نمایید .

بنده آموزش LINQ را در سه مقاله ارائه خواهم کرد :

  1. لینک به اشیاء (LINQ to Objects)
  2. لینک به ایکس ام ال (LINQ to XML)
  3. لینک به اس کیو ال (LINQ to SQL)

 برای دیدن ادامه مطلب روی لینک زیر کلیک کنید


داغ کن - کلوب دات کام
ادامه مطلب

نوشته شده در  90/02/26ساعت 20:48  توسط آرش وهابی  | 

در این پست، من قصد دارم تا پیاده سازی تکنیک بازنویسی آدرس وب را در چند روش و با استفاده از چند مثال تشریح کنم. به فرض ما در حال ایجاد مجموعه ای از صفحات فروشگاه تجارت الکترونیکی در برنامه وب هستیم، و فرض می کنیم محصولات این فروشگاه طبقه بندی شده است (به عنوان مثال : کتاب، فیلم، سی دی، دی وی دی ، و غیره .

بیایید فرض کنیم که ما در ابتدا یک صفحه به نام "Products.aspx" داریم که نام یک محصول رو به عنوان ورودی querystring می گیره و اطلاعات صفحه رو بر اساس نام محصول یا شناسه فیلتر میکنه. آدرس مربوط به صفحه Products.aspx، مثل اینه :

http://www.store.com/products.aspx?category=books
http://www.store.com/products.aspx?category=DVDs
http://www.store.com/products.aspx?category=CDs

به جای استفاده از یک querystring برای نمایش هر دسته، ما می خواهیم تا تغییری در آدرس ایجاد کنیم طوری که به نظر برسد که هر دسته از محصولات یک آدرس منحصر به فرد دارد و این به موتور جستجو هم بسیار کمک میکند تا محصولات شما را به درستی معرفی کند .در ادامه این پست بیش از 4 روش مختلف را برای چنین تکنیکی بررسی می کنیم .

روش 1 : استفاده از پارامترها Request.PathInfo به جای QueryStrings

در روش اول من قصد دارم برای نشان دادن آدرس ،از روشی برای بازنویس استفاده کنم که یکی از ویژگی های نا شناخته شده در ASP.NET است . ویژگی Request.PathInfo. برای درک بهتر این روش آدرس فروشگاه اینترنتی به شکل زیر را در نظر بگیرید :

http://www.store.com/products.aspx/Books
http://www.store.com/products.aspx/DVDs
http://www.store.com/products.aspx/CDs

آدرسی به این سبک دیگر حالت Querystring ندارد و با قرار دادن کاراکتر / پس از Products.aspx موتور های جستجو آنرا به عنوان سه آدرس متفاوت می شناسند و نه به عنوان یک آدرس اینترنتی با سه مقدار ورودی مختلف .

حالا سوال اینه که چه طور باید این آدرسو تو برنامه تشخیص داد و محتوای مورد نظر بیننده رو بهش نشون داد.

شما به سادگی می توانید به کمک Request.PathInfo  پارامترهای بعد از / را از ادامه آدرس بخوانید:


public string GetCategory()
{

	if ((Request.PathInfo.Length == 0)) {
		return "";
	} else {
		return Request.PathInfo.Substring(1);
	}

}
این تابع مقدار book و dvds و cds را بازمی گرداند . اسکات گاتری در وبلاگ خود مثالی از این روش دارد که می توانید آنرا دانلود کنید .
Request.PathInfo Example
روش 2 : استفاده از HttpModule برای انجام بازنویسی آدرس
روش جایگزین برای روش Request.PathInfo استفاده از متد HttpContext.RewritePath است این روش اجازه می دهد تا یک برنامه نویس به صورت پویا مسیر پردازش آدرس های ورودی را بازنویسی کند تا ASP.NET اجرای درخواست را با استفاده از مسیر تازه ادامه دهد.

فرض کنید می خواهیم آدرس ها را به این شکل به کاربران نمایش دهیم .
http://www.store.com/products/Books.aspx
http://www.store.com/products/DVDs.aspx
http://www.store.com/products/CDs.aspx
این صفحات از نظر مراجعه کننده 3 صفحه جدا است ( و بسیار مناسب برای موتور جستجو ) اما در واقع همه این موارد به یک صفجه ارجاع داده می شود . در روش اول چون نام products.aspx در آدرس موجود بود ادامه آدرس به صفحه products.aspx ارجاع داده میشد اما چون در این روش آدرس ها به شکلی است که مفسر آدرس در سرور نمی تواند آنرا درک کند باید در جایی از برنامه مشخص کنیم که اگر آدرسی به فرم بالا دیدی آنرا به products.aspx ارجاع بده .

برای این کار می توانیم از رخداد Application_BeginReques در Global.asax استفاده کنیم . مثال :


    void Application_BeginRequest(object sender, EventArgs e) {

        
string fullOrigionalpath Request.Url.ToString();
        
        if 
(fullOrigionalpath.Contains("/Products/Books.aspx")) {
            Context.RewritePath(
"/Products.aspx?Category=Books");
        
}
        
else if (fullOrigionalpath.Contains("/Products/DVDs.aspx")) {
            Context.RewritePath(
"/Products.aspx?Category=DVDs");
        
}
    }

البته نوشتن کدهایی شبیه به این روش بسیار  خسته کننده و مستعد خطا خواهد بود .پس پیشنهاد می کنم تا از روش های دیگه استفاده کنید که بهترین اونها استفاده از ماژول هایی هستند که به صورت رایگان واسه دانلود وجود دارن .
 
این ماژول ها را در web.config معرفی می کنید و مشخص می کنید که چه الگوی آدرسی را برای تبدیل مد نظر دارید به نمونه کد زیر توجه کنید که از UrlRewriter.net استفاده شده است و در فایل web.config قرار داده شده است. ( نیازی به کد نویسی نیست )
<?xml version="1.0"?>
<configuration>

  
<configSections>
    
<section name="rewriter"  
             requirePermission
="false" 
             type
="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  configSections>
  
  
<system.web>
      
    
<httpModules>
      
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
    httpModules>
    
  
system.web>

  
<rewriter>
    
<rewrite url="~/products/books.aspx" to="~/products.aspx?category=books" />
    <
rewrite url="~/products/CDs.aspx" to="~/products.aspx?category=CDs" />
    <
rewrite url="~/products/DVDs.aspx" to="~/products.aspx?category=DVDs" />
  rewriter>  
  
configuration> 

اگر بخواهید از روش بالا برای تجزیه آدرسها استفاده کنید برای سایتهای سایز سازمانی بسیار خسته کننده کننده خواهد . نگران نباشید همیشه روشهای راحت تر هم هست .
شما می توانید با استفاده از قابلیت regular expression یک قاعده کلی برای پویش آدرسها بنویسید . به کد زیر توجه کنید . نمونه ای از regular expression است برای تجزیه پارامترهای ورودی به این صفحه :

  <rewriter>
    
<rewrite url="~/products/(.+).aspx" to="~/products.aspx?category=$1" /ِ>  ِ<ِ/ِrewriter>  



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

باید متذکر شوم که در این روش نیازی به هیچگونه تغییری در تنظیمات سرور نیست . حال به شیوه بعدی می پردازیم .

روش 3 :
استفاده از HttpModule برای انجام بازنویسی آدرس در IIS7

روش هایی که تا کنون گفته شد برای آدرسهایی مناسب است که پسوند aspx. در آدرس وجود دارد اما برای اینکه آدرس هایی ساده تر و خلوت تر از آنچه تا کنون گفته شد داشته باشیم باید کمی بیشتر تلاش کنیم .
در این روش می خواهیم آدرسی به شکل زیر را برای صفحه های وب داشته باشیم .
http://www.store.com/products/Books
http://www.store.com/products/DVDs
http://www.store.com/products/CDs

این بهترین شکل آدرس برای یک محصول است به چند دلیل :

1- آسان به خاطر می ماند

2- موتور جستجو به آسانی دسته بندیش میکند

3- امنیت وب سایت را بالا می برد

پردازش آدرسهای فوق با استفاده از IIS5 و IIS6 آسان نیست و برای پردازش این شکل از آدرس ها باید ISAPI Extensions را در دات نت بازسازی کنید که این روش در بخش 4 تشریح خواهد شد. اما در IIS 7 مشکلی برای اینکار وجود ندارد و بدون هیچ تغییری در تنظیمات سرور می توانید وب سایت خود را با این روش آدرس دهی اجرا کنید .

به کد های زیر توجه کنید که تنظیمات مربوط به این شکل آدرس دهی را در web.config با استفاده از  URLRewriter نمایش می دهد .

<?xml version="1.0" encoding="UTF-8"?>

<configuration>

  <configSections>
    <section name="rewriter" 
             requirePermission="false" 
             type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" />
  configSections>
  
  <system.web>
      
    <httpModules>
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
    httpModules>
    
  system.web>

  <system.webServer>

    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule" />
    modules>

    <validation validateIntegratedModeConfiguration="false" />

  system.webServer>

  <rewriter>
    <rewrite url="~/products/(.+)" to="~/products.aspx?category=$1" />
  rewriter>
  
configuration>

1) آن بر روی هر IIS 7.0 ماشین کار می کنند. شما یک مدیر لازم نیست که فعال کردن هر چه بر روی میزبان از راه دور. علاوه بر این در اعتماد متوسط ​​حالات میزبانی مشترک کار می کنند.


2) از آنجا که من پیکربندی UrlRewriter در هر دو حالت و  
پیش فرض IIS7  تنظیم کردم می توانم برنامه را در هم روی سرور IIS7 و هم روی سرور تعبیه شده در محیط Visual Studio به نام (aka Cassini) اجرا کنیم .

یک برنامه نمونه نیز برای این روش ارائه شده است که می توانید از اینجا دانلود کنید .


روش 4 : ISAPIRewrite به فعال کردن فرمت آدرس بدون پسوند برای IIS5 و IIS6

اگر نمی خواهید برنامه خود را روی سرور با IIS 7.0 اجرا کنید برای پیاده سازی این  روش در IIS5 و IIS6 باید از فیلتر ISAPI  برای بازنویسی آدرس ها استفاده شود .

برای استفاده از این روش بهترین ابزار موجود که رایگان هم هست Ionic's ISAPI Rewrite است .

برای بازنویسی آدرسها این ابزار یک ابزار تایید شده توسط بسیاری از شخصیت های برتر مایکروسافت است .

می توانید از وبلاگ اسکات هنسلمن هم تشریحی از این روش ببینید .



داغ کن - کلوب دات کام

نوشته شده در  90/02/22ساعت 18:31  توسط آرش وهابی  | 

این سایت پر از کتابهای رایگان است که خارج از ایران رایگان نیستند ;)

هم دانلود با لینک مستقیم داره و هم غیر مستقیم . ثبت نام کنید بعد اجازه دانلود میده.

بفرمیو ...


library.nu

اینم چندتا کتاب خوب از همین سایت :


Beginning Web Development, Silverlight, and ASP.NET AJAX: From Novice to Professional (Beginning from Novice to Professional)


داغ کن - کلوب دات کام

نوشته شده در  90/02/21ساعت 18:13  توسط آرش وهابی  | 

تاریخچه در فایر فاکس در فایلی با فرمت دیتا بیس SQLite ذخیره شده است . حتی cookiesها و ورودی های فرم هم در این پایگاه داده ذخیره می شوند . برای دسترسی به پایگاه داده فایر فاکس می توانید از SQLite Manager استفاده کنید .

به کمک این افزونه شما می توانید همه فایل های SQLite را مشاهده کنید یا فایل جدیدی ایجاد کنید و یا دستورات SQL را در آن اجرا کنید .

دانلود SQLite Manager




داغ کن - کلوب دات کام

نوشته شده در  89/10/23ساعت 12:15  توسط آرش وهابی  | 

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

بسیار از toolKit های موجود در Ajax.Net را می توان با استفاده از ابزار های سبکتری مانند JQuery نیز پیاده سازی کرد . چند فریم ورک برای این کار وجود دارد که بنده شخصا JQuey را ترجیح می دهم . اما برای اشخاصی که نیازی به قابلیت های پیشرفته JQuery ندارند Dojo پیشنهاد می شود که بسیار سریع است . 

مقایسه ای بین بهترین های جاوا در ادامه آورده شده است که به روشنی سرعت هر framework را نشان می دهد .



نمودار مقایسه سرعت


framework ها را دانلود کنید :

Dojo

JQuery

MooTools

Prototype



Dojo 1.0.2 JQuery 1.2.3 MooTools 1.2beta2 Prototype 1.6.0.2
Mozilla Firefox 2.0.0.12 – no addons – winxp 128 266 115 259
Mozilla Firefox 2.0.0.12 – winxp 144 290 127 260
Mozilla Firefox 2.0.0.12 – linux 253 438 255 384
Opera 9.26 – winxp 32 136 148 194
Opera 9.26 – linux 110 188 238 364
Internet Explorer 7 – no addons – winxp 263 330 662 1563
Internet Explorer 7 – winxp 264 334 674 1583
Internet Explorer 6 387 600 945 2279
Internet Explorer 6 – linux (wine) 692 978 1310 2616
Safari 3.0.4 Beta 3 – winxp 36 76 84 116
Konqueror – linux 324 450 X X

داغ کن - کلوب دات کام

نوشته شده در  89/03/01ساعت 21:7  توسط آرش وهابی  |