اموزش ASP

آموزش THEME و SKIN :


آموزش گرافیک در ASP.NET


theme، مجموعه ای از تنظیمات پراپرتی است که به شما اجازه می دهد ظاهر صفحات و کنترل ها را تعریف کنید، و آن ظاهر را در صفحات web application، در کل یک web application، یا کل web applicationها روی سرور اعمال کنید.

تم ها و اسکین های کنترل

تم ها از یک سری از عنصرها تشکیل شده اند: اسکین ها، CSS، تصاویر، و منابع دیگر. یک تم حداقل حاوی اسکین ها خواهد بود. تمها در دایرکتوری های ویژه ای در وب سایت یا روی سرور وب شما تعریف می شوند.

اسکین ها

یک فایل اسکین ، دارای اکتنشن .skin و حاوی تنظیمات پراپرتی برای کنترل های منفرد از قبیل Button، Label، Textbox، یا کنترل های Calendar است. تنظیمات Control skin، شبیه control markup هستند، اما فقط حاوی پراپرتی هایی است که می خواهید به عنوان بخشی از تم تنظیم کنید. مثلاً، کد زیر، یک control skin برای کنترل Button است:

<asp:button runat="server" BackColor="lightblue" ForeColor="black" />

 

شما فایل های .skin را در پوشه Theme ایجاد کردید. یک فایل .skin ممکن است حاوی یک یا چند control skin برای یک یا چند control type باشد. می توانید اسکین هایی را در فایلی جدا برای هر کنترل تعریف کنید یا همه اسکین ها را برای یک تم در فایلی واحد تعریف کنید.

دو نوع control skin وجود دارد: اسکین های پیش فرض و اسکین های نام گذاری شده:

  • اسکین پیش فرض: هنگامی که تم به یک صفحه اعمال می شود،بطور اتوماتیک به همه کنترل های یک type، اعمال می شود. یک control skin، یک اسکین پیش فرض است، اگر دارای اتریبیوت SkinID نباشد. مثلاً، اگر یک اسکین پیش فرض برای کنترل Calendar ایجاد کنید، control skin به همه کنترل های Calendar که روی صفحه ای که از تم استفاده می کنند اعمال می شود. (اسکین های پیش فرض، دقیقاً بوسیله control type مچ می شوند، بطوری که اسکین کنترل Button به همه کتنرل های Button اعمال می شود، اما به کنترل های LinkButton یا کنترل هایی که از Button object مشتق می شوند اعمال نمی شود.)
  • اسکین نام گذاری شده: کنترلی با مجموعه پراپرتی های SkinID است. اسکین های نام گذاری شده بطور اتوماتیک به کنتنرل هایی توسط type اعمال نمی شوند. در عوض، اسکین نام گذاری شده را مستقیماً به کنترلی توسط تنظیم پراپرتی SkinID کنترل اعمال می کنید. ایجاد اسکین های نام گذاری شده به شما اجازه می دهند اسکین های مختلفی را برای instanceهای مختلف همان کنترل در یک برنامه تنظیم کنید.

 

CSS

یک تم می تواند حاوی فایل .css نیز باشد. وقتی شما یک فایل .css در پوشه تم قرار می دهید، style sheet بطور اتوماتیک بعنوان بخشی از تم اعمال می شود. شما با استفاده از اکتنشن .css در پوشه تم ، یک style sheet تعریف می کنید.

Theme Graphics و منابع دیگر

همچنین این تم ها ممکن است حاوی graphics و منابع دیگر از قبیل فایل های script، یا فایل های صوتی شود. مثلاً، ممکن است بخشی از تم صفحه شما حاوی یک اسکین برای کنترل TreeView باشد. می توانید graphicهای استفاده شده بمنظور نمایش دکمه expand و دکمه collapse را بعنوان بخشی از تم شامل کنید.

معمولاً فایل های منبع برای تم در همان پوشه ای هستند که فایل های اسکین برای تم وجود دارند، اما می توانند هر جایی در Web application نیز باشند، مثلاً در subfolder پوشه تم .

<asp:Image runat="server" ImageUrl="ThemeSubfolder/filename.ext" />

 

همچنین می توانید فایل های منبع تان را بیرون از پوشه تم نیز ذخیره کنید. اگر از سینتکس tilde (~) برای ارجاع به فایل های منبع استفاده می کنید، Web application بطور اتوماتیک تصاویر را پیدا خواهد کرد. مثلاً اگر منابع یک تم را در یک subfolder برنامه تان قرار دهید، می توانید از مسیرهای فرم ~/SubFolder/filename.ext برای ارجاع به فایل های منبع استفاده کنید، همانطور که در مثال زیر نشان داده شده است.

<asp:Image runat="server" ImageUrl="~/AppSubfolder/filename.ext" />

Scope کردن تم

می توانید تم هایی را برای یک Web applicationواحد، یا بعنوان یک تم جهانی که می تواند توسط همه applicationهای روی Web server استفاده شود، تعریف کنید. بعد از تعریف تم ، می توان آن را با استفاده از اتریبیوت تم یا StyleSheetTheme روی صفحه های مجزا قرار داد، یا می توان با تنظیم عنصر <pages> در پیکر بندی application به همه صفحه های یک application اعمال کنید. اگر عنصر <pages> در فایل Machine.config تعریف شود، تم به همه صفحه ها در Web applicationهای روی سرور اعمال خواهد شد.

تم های صفحه

تم صفحه، یک پوشه تم با control skins، style sheets، فایل های Graphics، و منابع دیگر است که بصورت یک subfolder در پوشه \App_Themes در وب سایت شما ایجاد شده است. هر تم ، یک subfolder متفاوت از پوشه \App_Themes است. مثال زیر، تم یک صفحه معمولی را نشان میدهد، که دو تم بنام های BlueTheme و PinkTheme را تعریف می کند.

MyWebSite
App_Themes
BlueTheme
Controls.skin
BlueTheme.css
PinkTheme
Controls.skin
PinkTheme.css

 

تم های جهانی (global)

تم جهانی، تمی است که می توانید به همه وب سایت های روی سرور اعمال کنید. تم های جهانی به شما اجازه تعریف نمایی کلی برای domain تان، هنگامی که از چندین وب سایت های که روی همان سرور هستند نگهداری می کنید، می دهد.

تم های جهانی، شبیه تم های صفحه هستند که حاوی تنظیمات property، تنظیمات style sheet، و graphic هستند. اما، تم های جهانی در پوشه ای بنام Theme ذخیره می شونده که برای سرور وب، global محسوب می شود. هر وب سایتی روی سرور، و هر صفحه ای در وب سایت، می تواند یک تم جهانی را reference کند.

آموزش ASP.NET

ارجحیت تنظیمات تم

با تعیین چگونگی اعمال شدن تم، می توانید ارجحیتی را که تنظیمات تم در تنظیمات کنترل محلی می گیرد، مشخص کنید.

اگر پراپرتی تم صفحه را تنضیم کنید، تنظیمات کنترل در تم و صفحه ادغام می شوند تا تنظیمات نهایی برای کنترل را شکل دهند. اگر تنظیمات کنترل هم در کنترل و هم در تم تعریف شوند، تنظیمات کنترل تم هر تنظیمات صفحه ای را روی کنترل override می کند. این استراتژی تم را قادر به ایجاد نمایی ثابت در صفحات می کند، حتی اگر کنترل های روی صفحه از قبل دارای تنظیمات پراپرتی مستقلی باشند. مثلاً، به شما اجازه می دهد تمی را به صفحه ای که در نسخه قبلی ASP.NET ایجاد کرده اید، اعمال کنید.

متناوباً، می توانید تمی را با تنظیم کردن پراپرتی StyleSheetTheme بصورت style sheet اعمال کنید. در این مورد، تنظیمات صفحه محلی، بر تنظیمات تعریف شده در تمی که هنگام تعریف تنظیمات در هر دو جا تعریف شده، ارجحیت دارد. این مدلی است که توسط CSS استفاده می شود. اگر می خواهید حتی هنگامی که تمی را برای نمای کلی اعمال می کنید، قادر به تنظیمات پراپرتی های کنترل های مستقل روی صفحه باشید، ممکن است تمی را بصورت style sheet اعمال کنید.

عنصرهای تم جهانی را نمی توان بصورت جزیی با عنصرهای تم هایی در سطح application جایگزین کرد. اگر تمی در سطح application را هم نام با تم جهانی ایجاد کنید، عناصر تم در تم سطح application، عناصر تم جهانی را override نخواهند کرد.

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

به عنوان یک قانون، می توانید از تم ها برای تعریف پراپرتی هایی استفاده کنید که مربوط به ظاهرصفحه یا کنترل و یا محتویات استاتیک هستند. می توانید فقط پراپرتی هایی را تنظیم کنید که دارای اتریبیوت ThemeableAttribute هستند و در کلاس کنترل روی true تنظیم شده اند.

پراپرتی هایی که بجای ظاهر، رفتار کنترل را تنظیم می کنند، valueهای تم را نمی پذیرند. مثلاً، نمی توانید پراپرتی CommandName کنترل Button را با استفاده از تم تنظیم کنید. بطور مشابه، نمی توانید از تم برای تنظیم پراپرتی AllowPaging کنترل GridView یا پراپرتی DataSource استفاده کنید.

دقت کنید که نمی توانید از عبارت سازها، که عبارات کد را برای تخصیص در صفحه ای هنگام compile کردن، generate می کنند، در تم ها و اسکین ها استفاده کنید.

تم ها در مقابل cascading style sheetها

تم ها در اینکه مجموعه ای از اتریبیوت های رایج را که می توان به هر صفحه ای اعمال کرد تعریف می کنند، شبیه cascading style sheetها هستند. اما، تم ها در موارد زیر با cascading style sheetها فرق دارند:

  • تم ها می توانند پراپرتی های زیاد یک صفحه یا کنترل را تعریف کنند، نه فقط پراپرتی های استایل را. مثلاً، با استفاده از آنها می توانید برای کنترل TreeView، و template layout کنترل GridView، و غیره، گرافیک تعریف کنید.
  • تم ها می توانند حاوی گرافیک باشند.
  • تم ها مانند style sheetها، cascade نمی کنند.
  • بطورپیش فرض، هر valueی پراپرتی تعریف شده در تم که توسط پراپرتی Theme، reference شده است، valueهای پراپرتی را که بطور تعریفی روی کنترل تنظیم شده است، Override می کند، مگر اینکه شما خودتان تم را با استفاد ه از پراپرتی StyleSheetTheme مستقیماً اعمال کنید.
  • فقط یک تم را می توان به هر صفحه اعمال کرد. نمی توانید چندین تم را به یک صفحه اعمال کنید، بر عکس style sheetها که چندین style sheet را می توان اعمال کرد.

 

ملاحظات امنیتی
  • رفتار یک کنترل را طوری تغییر دهید که آنطور که انتظار می رود، رفتار نکند.
  • اسکریپت را در کامپیوتر client تزریق کنید، که منجر به ریسک cross-site scripting می شود.
  • اعتبار سنجی را تغییر دهید.
  • اطلاعات حساس را expose کنید.
  • راههای کاهش این خطرهای رایج عبارتند از:
  • دایرکتوری های جهانی و تم application را با تنظیمات مناسب کنترل access محافظت کنید. فقط باید به کاربرهای مورد اطمینان اجازه نوشتن فایل روی دایرکتوری تم را داد.
  • از تم هایی با منبع غیر قابل اطمینان استفاده کنید. همیشه قبل از استفاده از تم ها در وب سایت تان، تم های خارج از سازمانتان را برای پیدا کردن کدهای خطرناک آزمایش کنید.
  • نام تم را در داده های کوئری، expose نکنید. کاربرهای بدجنس می توانند از این اطلاعات برای استفاده از تم هایی که برای برنامه نویس ناشناس هستند استفاده کنند، و بدینوسیله اطلاعات حساس را expose می کنند.

برای فراگیری ASP.NET لطفا به لینک زیر رجوع کنید:

اموزش ASP.NET





کتاب آموزش ASP

متن نویسه...

 

 

یکی از کتابهای مرجع برای یادگیری   ASP.NET کتاب UNLEASHED  می باشد.این کتاب حدود 1900 صفحه می باشد و واقعا کتاب مرجع خوبی برای یادگیری برنامه نویسی ASP.NET 4   می باشد. حتما دانلود کنید و از این کتاب استفاده ببرید.


 لینک دانلود:       کتاب آموزش ASP.NET





آموزش تخصصی آژاکس

آموزش ASP.NET


آموزش تخصصی Ajax

مقدمه

ASP.NET AJAX، که قبلا "atlas" نامیده میشد، پیاده سازی مایکروسافت از قالب کاری بر اساس AJAX است که برای ASP.NET ایجاد شده است (گرچه می تواند در platformهای دیگر نیز مورد استفاده قرار گیرد). AJAX، مخفف عبارت Asynchronous JavaScript and XML است، که گرچه بسیار ساده است، ولی روشی برای انتقال داده ها بین سرور و کلاینت بدون ارسال کل صفحه است، و بدین طریق postback کاملی را ایجاد می کند. این کار به کاربر اجازه تجربه ای بهتر را می دهد، از آنجاییکه بارگذاری محتوای دینامیک را می توان در پشت زمینه بدون refresh یا redraw کردن نیز انجام داد. اگر تا بحال از gmail یا Outlook Web Access استفاده کرده باشید، پس حتما از یک webapplication با قابلیت Ajax استفاده کرده اید؛ بویژه اینکه گوگل Ajax را بسیار معروف کرده است.

در حالیکه استفاده از Ajax، بدون Microsoft ASP.NET AJAX کاملا امکانپذیر است، خیلی چیزها بسیار آسانتر هستند، زیرا مایکروسافت بعضی از کسل کننده ترین بخش های Ajax را در پیاده سازی شان جا داده است. مثلاً، 3 مرورگر معروف به روش های مختلفی برای استفاده از Ajax احتیاج دارند و دارای پیاده سازی های جاواسکریپت مختلفی هستند. ASP.NET AJAX، این کار را بسیار ساده کرده است، و به شما اجازه نوشتن یک کد برای هر سه مرورگر معروف را می دهد.

شروع کار

قبل از هر چیز، باید با ASP.NET آشنایی داشته باشید. اگر شما دارای IDE مناسب باشید، استفاده از ASP.NET AJAX بسیار آسان خواهد شد. توصیه می شود از Visual Web Developer 2008 Express اسنتفاده کنید.

بعد از اینکه آخرین نسخه را نصب کردید، Visual Web Developer 2008 Express را باز کنید، و هنگامی که "New Web Site..." را از منوی File انتخاب کردید، از تمپلیت "ASP.NET website" استفاده کنید.

طبق معمول، از مثال "Hello, world!" به عنوان مثال اول استفاده می کنیم. ابتدا با کد شروع می کنیم و. سپس آن را توضیح خواهیم داد. اگر قبلاً این کار را نکرده اید، باید یک پروژه وب سایت جدید در Visual Web Developer ایجاد کنید. IDE یک فایل جدید Default.aspx و Default.aspx.cs برای شما ایجاد خواهد کرد، که شیه همه صفحات دیگر ASP.NET خواهد بود. بیایید کمی AJAX به آن اضافه کنیم:

<%@ Page Language="C#" AutoEventWireup="true" 
CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Hello, world!</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="MainScriptManager" runat="server" />
<asp:UpdatePanel ID="pnlHelloWorld" runat="server">
<ContentTemplate>
<asp:Label runat="server" ID="lblHelloWorld" Text="Click the button!" />
<br /><br />
<asp:Button runat="server" ID="btnHelloWorld" OnClick="btnHelloWorld_Click" Text="Update label!" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

در CodeBehind، چیز جدیدی غیر از این رویداد که باید اضافه کنید وجود ندارد:

protected void btnHelloWorld_Click(object sender, EventArgs e)
{
lblHelloWorld.Text = "Hello, world - this is a fresh message from ASP.NET AJAX! The time right now is:
"
+ DateTime.Now.ToLongTimeString();
}

در قسمت markup، در مقایسه با ASP.NET معمولی، از دو چیز جدید استفاده می کنیم، کنترل ScriptManager و کنترل UpdatePanel. کنترل ScriptManager چک می کند آیا فایل های ASP.NET AJAX شامل شده اند و اینکه AJAX support اضافه شده است، و باید به هر صفحه ای که دوست دارید از قابلیت AJAX استفاده کنید، اضافه شود. بعد از manager، یکی دیگر از پرکاربردترین کنترل ها هنگام کار با AJAX، کنترل UpdatePanel است. این کنترل به شما اجازه می دهد markupیی را که دوست دارید به طور جزیی آپدیت شود، wrap کنید، بدین معنی که بدون ایجاد یک postback واقعی در سرور، آپدیت شود. توضیحات بیشتر در مورد کنترل UpdatePanel در فصل بعد خواهد آمد. علاوه بر این دو کنترل، هر چیز دیگری، کنترل های استاندارد هستند، بدون هیچ تغییری که رفتار جایگزین را نشان می دهد.

سعی کنید سایت مثال را اجرا کنید، و روی دکمه کلیک کنید. لیبل با متن Hello world، و زمان کنونی آپدیت می شود. به طور مکرر، روی دکمه کلیک کنید، و خواهید دید که لیبل هر دفعه timestamp کنونی را بدست خواهد آورد. به غیبت عجیب پنجره چشمک زن و نوار وضعیت در حال اجرا توجه داشته باشید – هر کاری بدون آپدیت کردن هیچ چیز جز لیبل انجام نمی شود. ما اولین صفحه AJAX را ایجاد کرده ایم. اگر دوست دارید بدانید این صفحه چگونه کار می کند، "enablepartialrendering" کنترل ScriptManager را روی false تنظیم کنید:

<asp:ScriptManager ID="MainScriptManager" runat="server" enablepartialrendering="false" />

این کار جلوی استفاده از rendering جزیی را روی صفحه می گیرد، و به شما نشان می دهد بدون AJAX چگونه کار می کند.

در قسمت بعدی، نگاهی به کنترل های دیگر AJAX و چگونگی استفاده از آنها خواهیم انداخت.

کنترل UpdatePanel

احتمالاً این کنترل، مهم ترین کنترل در بسته ASP.NET AJAX است. این کنترل، اجازه render جزیی ناحیه ای را می دهد. قبلا از آن در مثال Hello world استفاده کردیم، در ادامه نگاهی عمیق تر به جنبه های دیگر این کنترل خواهیم انداخت.

تگ <asp:UpdatePanel> دارای دو زیرتگ (childtags) است: ContentTemplate و Triggers. تگ ContentTemplate ضروری است زیرا دربرگیرنده محتویات پنل است. این محتویات می تواند هر چیزی که معمولاً در صفحه گذاشته می شود، باشد،؛ از متن گرفته تا کنترل های وب. تگ trigger به شما اجازه تعریف بعضی triggerها را می دهد که پنل را وادار به آپدیت کردن محتویاتش می کند. مثال زیر، نحوه استفاد ه از این دو childtag را نشان می دهد.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>UpdatePanel</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="UpdateButton2" eventname="Click" />
</Triggers>
<ContentTemplate>
<asp:Label runat="server" id="DateTimeLabel1" />
<asp:Button runat="server" id="UpdateButton1" onclick="UpdateButton_Click" text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel runat="server" id="UpdatePanel1" updatemode="Conditional">
<ContentTemplate>
<asp:Label runat="server" id="DateTimeLabel2" />
<asp:Button runat="server" id="UpdateButton2" onclick="UpdateButton_Click" text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

در زیر CodeBehind آورده شده است. کافیست متد زیر را به فایل اضافه کنید:

protected void UpdateButton_Click(object sender, EventArgs e)
{
DateTimeLabel1.Text = DateTime.Now.ToString();
DateTimeLabel2.Text = DateTime.Now.ToString();
}

خوب، این مثال چه می خواهد بگوید؟ بیایید امتحانش کنیم، و روی آن دو دکمه کلیک کنیم. متوجه خواهید شد که دکمه اول، فقط datestamp اول را آپدیت می کند، در حالیکه دکمه دوم، هر دو را آپدیت می کند؛ چرا؟ چون ما پنل ها راطوری تنظیم کرده ایم که به طور شرطی آپدیت کنند، بدین معنا که محتویاتشان فقط در صورتی آپدیت می شوند که چیزی درون آنها یک postback ایجاد کند، یا یکی از triggerهای تعریف شده، اجرا شود. همانطور که می بینید، UpdatePanel اول حامل تریگری است که دکمه دوم را reference می کند. این کار تضمین می کند که پنل اول، حتی وقتی هم که کنترلی در UpdatePanel دیگر استفاده می شود، آپدیت می شود. تگ AsyncPostBackTrigger بسیار ساده است- فقط دارای دو صفت (attribute) است؛ یکی controlid که مرجعی به کنترلی است که می تواند آن را trigger کند، و دیگری eventname، که می گوید کدام enettype می تواند باعث اجرا شدن تریگر شود. اگر دوست دارید محتویات یک UpdatePanel آپدیت شوند، می توانید پراپرتی updatemode را به Always تغییر دهید.

در کل، UpdatePanel فقط باید در مناطقی باشد که باشند که دوست دارید آپدیت جزیی را انجام دهید. کل صفحه را در یک UpdatePanel، wrap نکنید، و از استفاده از چندین UpdatePanel نترسید، زیرا این کار به شما امکان کنترل بیشتری روی این می دهد که کدام ناحیه ها چه زمانی آپدیت کنند.

کنترل UpdateProgress

یکی از مشکلات AJAX، این است که چون غیر همزمان و در پیش زمینه است، مرورگر هیچ statusیی به شما نشان نخواهد داد. اما با سرورهای و متدهای سریع، این مشکل زیاد هم بزرگ نیست، اما هروقت شما متدی دارید که زمان زیادی طول می کشد، احتمال دارد کاربر خسته شود. خوشبختانه، ASP.NET AJAX این مشکل را نیز با کنترلی بنام UpdateProgress حل می کند. این کنترل از template خودتان استفاده می کند تا نشان دهد یک متد غیر همزمان در حال کار کردن است. نگاهی به مثال زیر بیاندازید، که کنترلی را که در حال فعالیت است، نشان می دهد.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>UpdateProgress control</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdateProgress runat="server" id="PageUpdateProgress">
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel runat="server" id="Panel">
<ContentTemplate>
<asp:Button runat="server" id="UpdateButton" onclick="UpdateButton_Click" text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

متد زیر باید به فایل CodeBehind اضافه شود:

protected void UpdateButton_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
}

این مثال ساده به شما نشان خواهد داد استفاده از کنترل UpdateProgress چقدر آسان است. وقتی روی این دکمه کلیک می شود، script بمدت پنج ثانیه از standby می شود، و متن "Loading..." روی صفحه تان نمایش داده می شود. می توانید از هر چیزی در ProgressTemplate، شامل markup معمولی و کنترل های دیگر استفاده کنید. یکی از استفاده های رایج، GIF متحرک است، که با استفاده از موقعیت یابی CSS روی صفحه قرار داده شده است.

می توانید روی صفحه کنترل های چندگانه UpdateProgress داشته باشید، و با استفاده از پراپرتی AssociatedUpdatePanelID می توانید مطمئن شوید که UpdateProgress فقط هنگامی نمایش داده می شود که یک UpdatePanel ، آپدیت شده است.

آشنایی با پراپرتی DynamicLayout نیز جالب است. این پراپرتی می گوید آیا یک صفحه باید فضایی را برای کنترل progress رزرو کند یا خیر. اگر روی true تنظیم شود، که پیش فزض است، فضا دینامیک است، پس رزرو نمی شود، اما وقتی کنترل نشان داده می شود، فضا گرفته می شود. اگر دوست دارید فضا را رزر کنید، این پراپرتی را روی false تنضیم کنید. برای دیدن تفاوت، می توانید این پراپرتی را به مثال ما اضافه کنید و آن را تغییر دهید.

اگر تعدادی از postbackها سریع باشند، UpdateProgress، مدتی کوتاه نمایش داده خواهد شد، و منجر به رفتار چشمک زدن خواهد شد، که ممکن است کاربرانتان را گیج کند. به همین دلیل، می توانید حداقل زمان روی دادن را قبل از نشان دادن کنترل progress، تعیین کنید. این کار را می توان با اتریبیوت DisplayAfter انجام داد. باید عددی را بصورت میلی ثانیه تعیین کنید تا قبل از نمایش کنترل progress سپری شود؛ مثلاً اگر دوست دارید دو ثانیه صبر کنید عدد 2000 را تعیین کنید.

کنترل Timer

این کنترل به شما اجازه می دهد pstbackهایی را در بعضی از وقفه ها (interval) انجام دهید. اگر با UpdatePanels استفاده شود، که رایج ترین روش است، به صفحه شما اجازه آپدیت جزیی و زمان بندی شده را می دهد، اما می توان برای postback کردن کل صفحه نیز استفاده کرد. در این بخش، روی استفاده از تایمرهایی با UpdatePanels تمرکز خواهیم کرد.

در زیر مثالی ساده از نحوه استفاده از کنترل Timer آورده شده است که فقط هر پنج ثانیه یکبار timestamp را آپدیت می کند.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Timers</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer runat="server" id="UpdateTimer" interval="5000" ontick="UpdateTimer_Tick" />
<asp:UpdatePanel runat="server" id="TimedPanel" updatemode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger controlid="UpdateTimer" eventname="Tick" />
</Triggers>
<ContentTemplate>
<asp:Label runat="server" id="DateStampLabel" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>

خیلی ساده است. ما یک UpdatePanel نرمال داریم که حامل یک Trigger reference به کنترل timer جدید ماست.

این بدین معناست که هروقت Timer تیک می کند – یعنی رویداد Tick را اجرا می کند – پنل آپدیت می شود. همانطور که در لیست کد CodeBehind می بینید، هر بار که Timer اجرا می شود، DateStampLabelرا اجرا می کنیم. این کار را می توان با JavaScript موثرتر انجام داد، که زمان را روی clientside آپدیت می کند بجای اینکه سرور را درگیر کند. از این مثال فقط برای نشان دادن پتانسیل کنترل Timer استفاده می شود.

روش دیگر، شامل کردن Timer درون است. انجام این کار، ما را از تعریف یک trigger بی نیاز می کند، اما باید بدانید که رفتار، بسته به اینکه آیا Timer درون است یا بیرون آن، متفاوت خواهد بود. وقتی Timer درون UpdatePanel باشد، تا وقتی که UpdatePanel کاملاً آپدیت می شود، Timer دوباره ساخته نمی شود. این بدین معناست که اگر یک تایمری با وقفه شصت ثانیه ای داشته باشیم، و آپدیت پنج ثانیه طول بکشد، رویداد بعدی شصت ثانیه بعد از رویداد قبلی اجرا نمی شود، بلکه شصت و پنج ثانیه بعد اجرا می شود. از سوی دیگر، اگر تایمر خارج از UpdatePanel باشد، کاربر می تواند فقط پنجاه و پنج ثانیه به محتویات پنل نگاه خواهد کرد، قبل از اینکه دوباره آپدیت شود.

همیشه بیاد داشته باشید که گرچه آپدیت های جزیی روی سرور به سنگینی postbackهای واقعی نیستند، اما سرور هنوز contact می شود، و ممکن است هنگام استفاده از تایمرها، ostbackهای جزیی زیادی بدست آورید؛ که می تواند سرعت را کم کند. تا جاییکه می توانید همیشه از وقفه های طولانی استفاده کنید، و دقت کنید آیا contact کردن با سرور واقعاً ضروری است یا خیر.

برای یادگیری کامل ASP.NET به لینک زیر رجوع کنید

آموزش ASP.NET








ASP.NET چیست؟

آموزش ASP.NET

ASP.NET چیست؟

ASP.NET نسل بعدی Active Server Pages يا ASP است که توسط شرکت ميکروسافت ارائه شده است. اين محصول توسط ميکروسافت بعنوان شاخص اصلی فناوری در ساخت سايتهای وب در نظر گرفته شده است. با استفاده از ASP.NET می توان هم اينترانت کوچک يک شرکت را ساخت و هم يک سايت وب تجاری خيلی بزرگ را طراحی و پياده سازی نمود. مهمترين نکاتی که در طراحی اين محصول در نظر گرفته شده است راحتی استفاده و بالا بودن کارائی و قابليت آن می باشد. در زير برخی ويژگيهای ASP.NET را بررسی می کنيم.
• صفحات ASP.NET کامپايل می شوند.
هنگامی که يک صفحه ASP.NET برای اولين بارتوسط يک مراجعه کننده به سايت فراخوانی می شود، آن صفحه ابتدا کامپايل شده و بر روی سرور نگهداشته می شود و در فراخوانی های بعدی از آن استفاده می شود. اين بدين معنی است که صفحات ASP.NET خيلی سريع اجرا می شوند.
• صفحات ASP.NET با ابزارهای روی سرور ساخته می شوند.
با ابزارهای موجود در ASP.NET می توان صفحات پيچيده وب را براحتی طراحی نمود. بعنوان مثال با استفاده از ابزار DataGrid می توان به آسانی داده های موجود در يک بانک اطلاعاتی را تحت وب نمايش داد.
• مجموعهASP.NET عضوی از بدنه NET. است.
بدنه NET. دارای بيش از ۴۵۰۰ کلاس آماده جهت استفاده در ASP.NET است. اين کلاس ها تقريبا هر نيازی را در برنامه نويسی برآورده می کنند. بعنوان مثال از اين کلاس ها می توان جهت توليد تصاوير بر حسب تقاضا، به رمز درآوردن يک فايل و يا ارسال يک نامه استفاده کرد.
مقايسه ASP.NET و ASP کلاسيک
ASP.NET نسل بعدی ASP يا ASP کلاسيک است. اما اين يک پيشرفت تکاملی است بطوريکه اين دو فناوری تقريبا از يکديگر متفاوتند. صفحات ASP با زبان های دستورالعمل نويسی مانند VBScript يا JScript ايجاد می شوند اما در ASP.NET ما يک فرايند کامل برنامه نويسی با زبانهای Visual Basic يا #C (سي-شارپ تلفظ شود) داريم. همچنين در ASP کلاسيک تنها پنج کلاس استاندارد (Request, Response, Application Session, Server) وجود دارد حال آنکه در ASP.NET می توان از بيش از ۴۵۰۰ کلاس استاندارد موجود در بدنه NET. بهره جست.همچنين عليرغم قدرت و امکانات زياد و متعدد ASP.NET، استفاده از آن در مقايسه با ASP کلاسيک بسيار آسانتر است. بعنوان مثال با استفاده از چند ابزار در يک صفحه ASP.NET می توان يک صفحه بسيار پيچيده HTML بدست آورد که ساخت آن در ASP کلاسيک ممکن است نياز به چند روز کار داشته باشد

زبانهای برنامه نويسی در ASP.NET
شما در ASP.NET می توانيد از هر زبان برنامه نويسی که با بدنه NET. سازگار باشد استفاده کنيد. اين زبانها عبارتند از Visual Basic.NET و #C و JScript.NET . اين بدين معنی است که شما جهت نوشتن برنامه در ASP.NET نياز به فراگيری زبان جديدی نداريد و اگر يکی از زبانهای ويژوال بيسيک يا ++C يا جاوا را می دانيد هم اکنون می توانيد در ASP.NET برنامه بنويسيد.از طرف ديگر تعدادی زبانهای ديگر توسط بعضی از شرکتهای فعال در اين زمينه به مجموعه زبانهای استاندارد ASP.NET افزوده شده است. بعنوان مثال اگر مايل باشيد حتی می توانيد از PERL و COBOL هم در ASP.NET استفاده کنيد.


ابزارهای ASP.NET
سالهاست که برنامه نويسان ويژوال بيسيک جهت ساخت فرم های خود از ابزارهای ويژوال بيسيک مانند TextBox و ListBox استفاده کرده اند. در ASP.NET هم شما می توانيد از ابزارهای فراوان موجود در آن برای ساخت فرم ها و صفحات خود استفاده نمائيد. در ASP.NET چهار دسته عمده از ابزارها موجود است:
• ابزارهای اصلی مانند TextBox، RadioButton، ListBox و Button.
• ابزارهای اعتباری برای حصول اطمينان از ورود و تائيد صحت اطلاعات ورودی فرم ها.
• ابزارهای داده ای برای ارتباط با بانک اطلاعاتی و دستکاری داده.
• ابزارهای پيشرفته جهت نمايش عناصر پيچيده در واسط کاربر مانند تقويم و آگهی های تبليغاتي.


با استفاده از Visual Studio.NET شما براحتی می توانيد با چيدن تصويری اين ابزارها بر روی فرم مورد نظر، صفحه دلخواه خود را بسازيد. در صورت تمايل حتی می توانيد در يک ويرايشگر ساده متن مانند Notepad برنامه مورد نظر را نوشته و از اين ابزارها استفاده کنيد.


دريافت ASP.NET
جهت شروع برنامه نويسی در ASP.NET تنها کافی است که مجموعه ASP.NET را بهمراه بدنه NET. از سايت ميکروسافت دريافت کنيد.


دريافت .NET Framework


ASP.NET با سيستم عامل های Windows 2000 (نسخه Server و Professional) و Windows XP کاملا سازگار است

به نقل از سایت آسان دانلود





پردازشهای مبتنی بر Client Server

آموزش ASP.NET



پردازشهای مبتنی بر client server

در اواسط دهه ۸۰ ميلادی و زمانيكه اولين بار توليدكنندگان تجهيزات شبكه، محصولات خود را به بازار عرضه كردند، واژه Client/Server وارد عرصه كامپيوتر گرديد. در آن زمان واژه فوق صرفا در رابطه با تجهيزات سخت افزاری ( كامپيوتر ) استفاده می شد و كامپيوتری كه از آن بعنوان مركز ثقل ارائه خدمات در يك شبكه ياد می شد، را با نام Server و كامپيوتری كه از اين امكانات استفاده می كرد را بعنوان Client می شناختند ( سايه نرم افزار بر اين واژه حضور سنگينی نداشت ).


امروزه واژه فوق دارای يك معنی خاص است كه چندان مرتبط با سخت افرار نمی گردد. اغلب مردم هنوز واژه Client را به يك كامپيوتر فيزيكی نسبت داده و واژه Server را به كامپيوتر فيزيكی ديگری كه به آن متصل و سرويس هائی را ارائه می نمايد، اطلاق می نمايند. مطلب فوق با اينكه درست است ولی صرفا يك بخش اندك از تمامی واقعيت های موجود در اين زمينه است. واژه فوق امروزه در مقياس وسيعتری به خدمت گرفته می شود. بمنظور آشنائی بيشتر با اين واژه لازم است در ابتدا با ساختار و يا معماری عمومی يك نرم افزار آشنا شويم.


اغلب برنامه های كاربردی دارای سه لايه اصلی می باشند :


لايه Presentation: ( بالاترين لايه ) اين لايه مسئول ايجاد ارتباط متقابل بين انسان و كامپيوتر است ( رابط كاربر). لايه فوق مسئوليت گرفتن اطلاعات ورودی از صفحه كليد، ماوس و ساير دستگاههای ورودی و نمايش اطلاعات ذيربط بر روی دستگاههای خروجی نظير صفحه نمايشگر است.


لايه Application يا Business Logic: لايه فوق مسئول اعمال و پياده سازی سياست های مورد نظر در يك نرم افزار است، در حقيقت با عملكرد لايه فوق است كه می توان تفاوت بين يك نرم افزار از نرم افزار ديگر را مشاهده و بعنوان مثال تفاوت بين يك نرم افزار ثبت سفارش و يا انبارداری را حس كرد.


لايه Service: اين لايه مسئول ارائه سرويس های خاص و مورد نياز برای ساير لايه ها نظير سرويس های مربوط به فايل، چاپ، ارتباطی و از همه مهمتر دسترسی به بانك های اطلا عاتی است. در ادامه بحث خود را بر روی مجموعه ای از نرم افزارها ئی متمركز خواهيم كرد كه نيازمند سرويس های بانك اطلاعاتی باشند.


تعداد طبقات ( Tires )، در يك نرم افزار Client Server به نحوه ارتباط ( متراكم، معمولی ) هر يك از سه لايه گفته شده بستگی خواهد داشت. در ادامه به بررسی مدل های رايج در اين زمينه خواهيم پرداخت.

مدل One-Tire
در اين نوع نرم افزارها سه لايه گفته شده بصورت متراكم و فشرده در كنار يكديگر قرار می گيرند. در مدل فوق لايه Presentation دارای آگاهی خاص و جزئی از ساختار بانك اطلاعاتی است. لايه Application اغلب بصورت موجی با لايه های Presentation و Service مرتبط خواهد بود. تمام سه لايه گفته شده بهمراه بانك اطلاعاتی، اغلب بر روی يكدستگاه كامپيوتر قرار گرفته و اجرا خواهند شد. نرم افزارهائی با اين خصوصيت بسادگی طراحی شده و بكمك ابزارهای برنامه نويسی امروزی بسرعت نوشته خواهند شد.


در صورتيكه بخواهيم يك نرم افزار One-tire با چندين كاربر را طراحی نمائيم، می توان نرم افزار را بر روی چندين كامپيوتر اجرا و با به اشتراك گذاشتن بانك اطلاعاتی زمينه استفاده از داده های موجود در بانك را برای ساير كاربران نيز فراهم نمود. بانك اطلاعاتی را می توان بر روی يكدستگاه كامپيوتر معمولی در يك شبكه نظير به نظير ( Peer to Peer ) و يا بر روی يك سرويس دهنده فايل ( File Server ) نصب نمود. در اين حالت هر يك از كامپيوترهائی كه برنامه بر روی آنها اجرا می گردد می بايست دارای يك نسخه از Database Engine بوده تا قادر به استفاده از داده های موجود در بانك اطلاعاتی باشند. در اين مدل صرفا داده ها به اشتراك گذاشته شده و منطق بانك اطلاعاتی به اشتراك گذاشته نشده است. اين نوع از نرم افزارها ( چند كاربره One Tire ) تا زمانيكه تعداد كاربران كم باشد موفق عمل می نمايند ولی با افزايش تعداد كاربران، با مشكل مواجه می شوند.


علت عمده بروز مشكل پايبند بودن اين نوع از نرم افزارها به انجام عمليات مربوط به بانك های اطلاعاتی بر روی هر يك از سرويس گيرندگان است. مثلا اگر برنامه ای از اين نوع نياز داشته باشد كه ليست تمامی كاربرانی را كه نام آنها Reza است، را نمايش دهد، می بايست تمامی اطلاعات ( ركوردهای داده و ايندكس های مربوطه ) بمنظور پاسخگوئی به درخواست واصل شده، بر روی شبكه فرستاده شود. در برخی حالا ت خاص و با توجه به پيچيدگی درخواست های صادر شده برای اطلاعاتی خاص، ممكن است تمامی بانك اطلاعاتی برای سرويس گيرنده ارسال گردد.


اگر از يك سطح فنی به مسئله فوق نگاه كنيم، مديريت Database Engine های مستقل بر روی سرويس گيرندگان بمنظور ممانعت از بروز تعارض ( Conflict ) بين دو سرويس گيرنده جهت تلاش برای دستيابی و يا بهنگام سازی برخی ركوردها مشكل است ( مسئله Record Locking ).


مدل Two Tire
بمنظور حل مشكل مطرح شده در مدل One-tire از بعد كارائی و مسائل فنی مربوطه، مدل فوق معرفی گرديد. نرم افزارهائی كه با اتكا بر مدل فوق طراحی و پياده سازی می گردنند در اغلب موارد دارای عملكردی مشابه مدل One Tire بوده با اين تفاوت مهم كه Database Engine بر روی سرويس گيرنده ها اجرا نخواهد شد.


در مدل فوق بانك اطلاعاتی بر روی سرويس دهنده اجرا می گردد. از روش های متعددی برای ارتباط بين لايه Application(Logic) و Database Service استفاده می گردد. SQL ( زبان ساختيافته پرس و جو ) از متداولترين روش های موجود در اين زمينه است. دستورات SQL به سرويس دهنده بانك اطلاعاتی ارسال شده و در آنجا عمليات مربوطه بصورت محلی انجام و نتيجه ( اطلاعات مربوط به درخواست ارسال شده ) برای سرويس گيرنده ها ارسال خواهد شد. در مدل فوق صرفا سرويس دهنده بانك اطلاعاتی از برنامه مجزا شده و لايه های Presentation و Busines Logic همچنان در هم تنيده هستند. دو لايه فوق همچنان دارای آگاهی اساسی ( محرمانه ) از بانك اطلاعاتی خواهند بود.


نوشتن برنامه هائی از اين قبيل تا اندازه ای پيچيده تر از مدل قبل است. امروزه ابزارهای برنامه نويسی نيز مجهز به پتانسيل هائی شده اند كه طراحی و نوشتن اين نوع از برنامه ها را سرعت می بخشد. اغلب ابزارهای برنامه نويسی دارای امكاناتی جهت استفاده از DataBase Engines بوده كه می توان از آنها در طراحی برنامه های One-Tire استفاده كرد ( نظير Jet Engine كه توسط اكسس و ويژوال بيسيك استفاده می گردد) اما نرم افزارهای Two Tire نيازمند محصولات مجزای بانك اطلاعاتی نظير Oracle , IBM DB2 , Sybase و SQL Sever می باشند.


مدل Three Tire
اين مدل همانگونه كه احتمالا حدس زده ايد تمامی سه لايه گفته شده را در بخش های مستقل قرار می دهد. در مدل فوق Business Logic يك سرويس است و می تواند بر روی كامپيوتر اختصاصی خود فعال و اجرا گردد. زمانيكه Business بصورت يك سرويس دهنده در نظر گرفته می شود با نام Application Server ناميده می شود. يك Application Server اغلب ممكن است بر روی همان كامپيوتری كه DataBase Engine قرار دارد، نصب گردد. شايد يكی از دلايل مهم جهت انجام اين كار افزايش كارآئی سيستم باشد.


يكی از مزايای مهم و كليدی، داشتن يك Application Server اين است كه بتوان آن را در محلی قرار داد كه به بهترين نوع ممكن خدمات خود را ارائه نمايد. در اين مدل مسئله حائز اهميت در اين است كه تمامی Application Serverها بتوانند و می بايست سرويس بانك اطلاعاتی خود را از يك كامپيوتر مركزی دريافت دارند. ( ممكن است در برخی حالات تعدادی از كاربران نرم افزار از يك Application Server كه بر روی يك كامپيوتر مجزا قرار گرفته است استفاده نمايند و يك كاربر از راه دور ممكن است Application Server را بر روی يكدستگاه كامپيوتر اختصاصی اجرا نمايد.) بهرحال محل Application Server و Database Server ارتباطی با كاربر نداشته و تمامی آنها با يك روش يكسان از نرم افزار و توانائی آن استفاده می نمايند.


در مدل فوق لايه Presentation دارای آگاهی خصوصی از بانك اطلاعاتی نبوده و لايه فوق از طريق لايه Application Server و بكمك يك استراتژی خاص با بانك اطلاعاتی مرتبط خواهد بود. مرورگرها در حالت خاص دارای هيچگونه شناختی از ساختار بانك اطلاعاتی در سايت Amazon.com نمی باشند ولی با اين حال قادر به ارتباط با بانك اطلاعاتی و خريد يك كتاب هستند. در مدل فوق با نگرش وب، سرويس گيرنده از طريق يك پروتكل خاص با يك Application Server مرتبط می گردد. برنامه هائی از اين نوع ( مدل Three Tire ) پيچيده تر از مدل های قبلی بوده و هنوز ابزارهای برنامه نويسی خاصی در اين زمينه وجود ندارد و برنامه نويسان مجبور به نوشتن حجم بالائی از كدها خواهند بود.


مدل N Tire
اين مدل امروزه بسرعت رايج و مطرح شده است. در حقيقت مدل Three Tire در حالت خاص به سمت N-Tire ميل خواهد كرد. در اين حالت يك Application Server می تواند درخواست خود را از چندين سرويس ديگر داشته باشد. هر يك از سرويس های صدا زده شده نيز خود می توانند سرويس های ديگری را جهت پاسخگوئی به درخواست واصل شده، فعال نمايند. واژه MiddleWare اغلب جهت تشريح ارتباط يك برنامه يا Business Logic بر روی يك Application Server استفاده می گردد.


چه ميزان از Bussines Logic می بايست بر روی Application Server قرار گيرد؟
بدون شك يكی از بخش های مهم هر نرم افزار كه دائما می تواند دستخوش تغييرات گردد، مجموعه قوانينی است كه با اعمال آنها سياست عملكردی يك نرم افزار تعيين می گردد. مثلا در يك سيستم بازرگانی می توان قانونی را داشته باشيم كه برای خريدهای بالای يكصد هزار تومان مجوز مدير مربوطه فرض است. در اين حالت می توان قانون فوق را بصورت يك روتين ( سرويس ) و بصورت جامع طراحی و در لايه Application قرار داد، سرويس فوق می تواند توسط ساير سرويس های موجود در اين لايه و يا ساير لايه ها مورد استفاده قرار گيرد. بديهی است در صورتيكه اين سياست به نوعی تغيير نمايد و قرار شود از اين پس خريدهای بالای يكصد و پنجاه هزار تومان مكلف به تاييد مديريت مربوطه باشند، بسادگی با اعمال تغيير در روتين فوق و تزريق سياست جديد، زمينه استفاده اتوماتيك از آن برای ساير سرويس های استفاده كننده فراهم می گردد.


نحوه و زمان تغيير سياست فوق از ديدگاه استفاده كننده و لايه Presentation مهم نبوده و تغييرات بصورت خودكار در تمامی سرويس های موجود در ساير لايه ها حس خواهد شد. بنابراين مجموعه قوانين و سياست هائی كه در روند عملياتی يك نرم افزار نقش تعيين كننده ای را دارند، می بايست در لايه Application قرار گرفته تا بدينوسيله امكان درج تغييرات و اعمال سياست های جديد مركزيت يافته و مسائل مربوط به پشتيبانی و ارتقا يك نرم افزار با اطمينان خاطر و صرف كمترين زمان و هزينه صورت پذيرد.


در برخی از موارد می توان اين سياست ها را در قالب مجموعه ای از سرويس ها در لايه Presentation قرار داد. بررسی صحت داده های ورودی يك نمونه مناسب در اين زمينه است. در اين مورد اغلب قوانين جهت بررسی اعتبار و صحت داده های ورودی بر روی لايه Presentation قرار خواهد گرفت. بديهی است در چنين حالتی بجای ارسال اطلاعات بررسی نشده به لايه Application و بكارگيری يك روتين جهت بررسی صحت داده ها، می توان اين عمليات را در لايه Presentation قرار داد تا بدينوسيله از يكطرف ترافيك محيط انتقال داده ها افزايش نيابد و از طرف ديگر كاربران رودرو با لايه Presentation بازخوردهای سريعی را از سيستم داشته باشند. بهرحال در چنين حالاتی بخشی از منطق عملكرد يك نرم افزار را در لايه Presentation قرار داده ايم. در صورتيكه حجم Logic اضافه شده در لايه Presentation كم و ناچيز باشد، در اينصورت لايه فوق بصورت انحصاری مسئوليت های پيش فرض خود را دنبال خواهد كرد. در چنين وضعيتی سرويس گيرنده را Thin Client می گويند. در حالتيكه بر روی سرويس گيرنده، Logic بالائی قرار گرفته باشد، به آن Fat Client می گويند.بهترين نمونه از يك Thin Client، مرورگرهای وب بوده كه قادر به ارتباط با انواع نرم افزهائی است كه بر روی وب سايت قرار دارند.


جمع بندی
واژه Client Server دارای معانی بمراتب بيشتری نسبت به جداسازی يك كامپيوتر سرويس گيرنده و سرويس دهنده از يكديگر است واژه فوق بسرعت در دنيای نرم افزار نيز مطرح و دارای جايگاه ويژه ای در اين زمينه شده است. از ديدگاه فوق يك روتين ( سرويس ) می تواند ارائه دهنده خدمات خاصی به ساير سرويس ها باشد. در چنين وضعيتی سرويس ارائه دهنده خدمات را Server و سرويس استفاده كننده از يك خدمات را Client می گويند. با تعميم سياست های طراحی نرم افزار از مدل های One Tire به Two-Tire و Three Tire و نهايتا N-Tire و تاكيد بر نگرش ساختيافته و اصولی به عملكرد هر يک از لايه ها، مفهوم روتين های سرويس دهنده ( Server ) و روتين های سرويس گيرنده (Client) جايگاه ممتازی را پيدا نمودند.


يك سرويس می تواند در عين خدمات دهی به ساير سرويس های متقاضی، خود نيز از خدمات ساير سرويس ها استفاده نمايد. بنابراين يك سرويس دهنده در چنين حالتی بصورت اختصاصی صرفا رسالت سرويس دهی و يا سرويس گيری را انجام نخواهد داد. اگر از ديگاه هر لايه به عملكرد سرويس ها نظری داشته باشيم، قطعا تمامی آنها مسئوليت ارائه يك سرويس خاص را در لايه مربوطه برعهده خواهند داشته و قدرمطلق تمامی آنها ارائه خدمات است. مهمترين مزيت نگرش فوق حركت بi سمت توليد سرويس هائی خواهد بود كه اولا امكان استفاده از آنان در چندين نرم افزار فراهم شده و ثانيا زمينه تحقق اصل بسيار مهم استفاده مجدد از كدهای نوشته شده (Reusable Code) نيز فراهم می گردد. امروزه با توجه به نياز روزافزون به طراحی و پياده سازی نرم افزارهای متكی بر وب، مدل های Three Tire و N-Tire بشدت مورد توجه طراحان و پياده كنندگان نرم افزارهای متكی بر بستر وب قرار گرفته است.

منقول از آسان دانلود






نشان دادن قابلیتهای مرور گر در ASP.NET

آموزش ASP.NET

نشان دادن قابلیتهای مرورگر در ASP.NET


اين مقاله نحوه نشان دادن قابليتهای مرورگر با استفاده از ASP.NET را نشان می دهد. 
اگرچه در حال حاضر جنگ مرورگرها تقريبا تمام شده است اما اين موضوع دليلی بر شناخته نشدن قابليتهای مرورگرها نيست. در اينجا توانايی ASP.NET در نشان دادن قابليتهای مرورگرها بحث شده است. بعنوان نمونه، مثال ۱ نوع مرورگر را به ما نشان می دهد.
<html><body>
You are using <% =Request.Browser.Type %>
</body></html>


برای نمونه اگر شما از IE 5 استفاده می کنيد نتيجه خروجی چنين بايد باشد:
You are using IE5


در مثال ۱ Request.Browser.Type يک رشته را که همان نام ونسخه‎ی مرورگر است را بر می گرداند. اما اين موضوع چگونه صورت ميگيرد ؟

شئ HTTPBrowserCapabilities 
در حقيقت خاصيت Browser در شئ Request کلاسی از HTTPBrowserCapabilities است که در فضانام System.Web قراردارد. وقتی که اين کلاس روی يک صفحه ASP.NET نمونه سازی می شود خواص صفحه سرويس گيرنده ای را نشان می دهد که از آن برای اجرا شدن کد استفاده شده است. شئ Request در برگيرنده اين خاصيت مرورگر است که اين کلاس را ميتوان معادل کلاس MSWC. BrowserCapabilities در ASP کلاسيک در نظر گرفت.


در ليست زير اکثر خاصيتهای شی HTTPBrowserCapabilities تشريح شده است:


ActiveXControls: نشان می دهد که مرورگر اکتيويکس را ساپورت می کند يا نه.
AOL: چک می کند که مرورگر از نوع AOL است يا نه.
Cookies: نشان می دهد که مرورگر کوکی ها را ساپورت می کند يا نه بايد توجه داشت که اين خاصيت وضعيت فعال بودن يا غير فعال بودن کوکی ها را نشان نمی دهد.
Crawler: نشان ميدهد که مرورگر سرويس گيرنده از موتورهای جستجو تاثير می پذيرد يا نه.
Browser: نوع مرورگر را نشان می دهد.
Frames: نشان می دهد که مرورگر از قابليت Frame برخورداراست يا نه.
MajorVersion: نسخه اصلی مرورگر را نشان می دهد بعنوان مثال در IE5 عدد 5 نشانگر نسخه اصلی است.
MinorVersion: نسخه جزيی (کوچکتر) مرورگر را نشان می دهد بعنوان مثال در IE5.1 عدد .1 نشانگر نسخه جزيی است.
Type: نوع ونسخه مرورگر را بصورت يک رشته بازميگرداند..
VBScript: نشان می دهد که مرورگر VBScript را ساپورت می کند يا نه.
Version: نسخه اصلی و جزيی مرورگر را بعنوان يک رشته برمی گرداند.


در زير نمونه کامل يک مثال آورده شده است.
<%@ page language="VB" %>
<%@ Import Namespace="System.Web" %>
<html>
<body>
<head><title>HTTPBrowserCapabilities Demo</title></head>


<%
Dim browserObj As HTTPBrowserCapabilities
browserObj = Request.Browser
%>
<font face="verdana, arial" size=2>


<p>Your browser supports ActiveX controls: <%=browserObj.ActiveXControls %> </p> 
<p>Your browser type: <%=browserObj.Type %> </p>
<p>Your browser version: <%=browserObj.Version%> </p>


... Add any other property that you would like to display


</font>
</body>
</html>







رویدادهای یک صفحه ASP.NET

آموزش ASP.NET


رویدادهای یک صفحه ASP.NET

بررسی مجموعه رويدادهايی که هنگام فراخوانی يک صفحه ASP.NET روی می دهند مانند Init و Load..
هنگامی که يک صفحه ASP.NET فراخوانی شود مجموعه رويدادهای زير به ترتيب رخ می دهند:


• Init: اولين رويدادی که هنگام فراخوانی صفحه انجام می گردد.
• Load: اين رويداد قبل از همه رويدادهای مربوط به کنترل های موجود درون صفحه رخ می دهد.
• PreRender: اين رويداد بعد از همه رويدادهای مربوط به کنترل های موجود درون صفحه رخ می دهد.
• Unload: هنگامی که صفحه از حافظه تخليه می گردد اين رويداد رخ می دهد.
• Disposed: اين رويداد بعد از آزاد سازی حافظه از صفحه روی می دهد.


جهت رسيدگی به اين رويدادها می توان برای هر يک، روال مجزائی نوشت. بعنوان مثال روال رسيدگی کننده به رويداد Load می تواند مانند زير باشد:
<Script Runat="Server">


Sub Page_Load
   ' Place any code that you want to execute here
End Sub
</Script>

توجه داشته باشيد که شما با ايجاد روالی بنام Page_Load می توانيد به رويداد Load مربوط به يک صفحه رسيدگی کنيد. بعبارت ديگر جهت رسيدگی به رويدادهای Disposed ،Unload ،PreRender ،Load ،Init بايد از روال هايی با نامهای Page_Unload ،Page_PreRender ،Page_Load ،Page_Init و Page_Disposed استفاده نمود.


معمولا مفيدترين رويداد يک صفحه رويداد Load می باشد. بعبارت ديگر از اين رويداد جهت مقداردهی به کنترل های موجود درون صفحه استفاده می گردد. برای مثال، مقداردهی يک برچسب يا مقداردهی يک کنترل DataGrid با داده های يک بانک اطلاعاتی در اين رويداد انجام می شود.


مهمترين تفاوت ميان رويدادهای Load و PreRender اين است که رويداد Load قبل از همه رويدادهای مربوط به کنترل های درون صفحه انجام می شود. جهت روشن شدن مطلب به مثال زير توجه فرمائيد. اين صفحه دارای سه رويداد Button_Click ،Page_Load و Page_PreRender می باشد. اگر بر روی دکمه موجود کليک شود ابتدا روال Page_Load، بعد روال Button_Click و در نهايت روال Page_PreRender اجرا می گردد.
<Script Runat="Server">


Sub Page_Load
   Response.Write( "<li> Page_Load" )
End Sub


Sub Button_Click( s As Object, e As EventArgs )
   Response.Write( "<li> Button_Click" )
End Sub


Sub Page_PreRender
   Response.Write( "<li> Page_PreRender" )
End Sub


</Script>


منقول از اسان دانلود

<html>
<head><title>EventOrder.aspx</title></head>
<body>


<form runat="Server">


<asp:Button
   Text="Click Here!"
   OnClick="Button_Click"
   Runat="Server" />


</form>


</body>
</html>





Upload کردن فایل به سرور در ASP.NET

آموزش ASP.NET

Upload کردن فایل به سرور در ASP.NET


کدهای مربوط به Upload کردن فايل به سرور را بايد به دو قسمت تقسيم نمود. قسمت اول شامل کدهايی است که نحوه نمايش در مرورگر را شامل می شوند و اساس آن بر HTML است. و قسمت دوم مربوط به طرف سرور است که شامل کدهايی است که با ASP.NET نوشته می شوند. برنامه زير حاوی کدهای مربوطه برای انجام اين کار به صورات خيلی ساده و ابتدايی می باشد. همانطور که ملاحظه می کنيد برخلاف ASP کلاسيک، نياز به وجود component خاصی نمی باشد و اين کار در ASP.NET بصورت خيلی ساده انجام پذير است.
Upload.aspx:
<HTML>
<HEAD>
<TITLE>Uploading File...</TITLE>
<Script language="vb" runat="server">
sub page_load(s as object,e as EventArgs)
    If Not (MyInputFile.PostedFile Is Nothing) Then
        MyInputFile.PostedFile.SaveAs("c:\filename.ext")
        Response.write("Your File was saved on the server...")
    End If 
end sub
</script>
</HEAD>
<BODY>
    <FORM method="post" encType="multipart/form-data">
        <input id="MyInputFile" type="file" name="MyInputFile" runat="server"> 
        <input type="submit" value="Submit">
    </FORM>
</BODY>
</HTML>


در زير به شرح و توضيح برنامه بالا می پردازيم:

کدهای مربوط به طرف Client
به دليل آنکه در اين قسمت، ارسال اطلاعات به سرور را داريم، بايد کدهای مربوطه درون يک فرم قرار گيرند. اما لازم است که ويژگی encType آن فرم را به صورت زير مقدار دهی کنيم، زيرا در غير اينصورت فايل انتخاب شده توسط کاربر به سرور ارسال نخواهد شد:
encType="multipart/form-data"


در HTML کنترلی وجود دارد که وظيفه دريافت نام فايل و ارسال آن به سرور را عهده دار می باشد:
<input id="MyInputFile" type="file" name="MyInputFile" runat="server">


توجه کنيد که اين کنترل را به صورت يک سرور کنترل در می آوريم تا بتوانيم در ASP.NET از توانايی های آن استفاده نماييم و به همين دليل ويژگی runat="server" را به کنترل مربوطه اضافه کرده ايم. بنابراين کد مربوط به قسمت Client به صورت زير خواهد بود:
<body>
<form method="post" encType="multipart/form-data">
<INPUT id="MyInputFile" type="file" name="MyInputFile" runat="server">
<input type="submit" value="Submit">
</form>
</body>


کدهای مربوط به طرف Server
اين قسمت کدهايی را شامل می شود که برای ذخيره کردن فايل بر روی سرويس دهنده مورد استفاده قرار می گيرند.همانطور که گفته شد شئ مربوط به دريافت نام فايل را به صورت سرور کنترل قرار داديم تا بتوانيم از خصوصيات آن در سرور استفاده کنيم (در اينجا نام آنرا MyInputFile درنظر گرفته ايم). يکی از خصوصيات اين شئ، شئ PostedFile می باشد که به فايل ارسالی توسط کاربر اشاره می کند. اين شئ نيز شامل متدی است که اقدام به ذخيره فايل می کند. بنابراين قبل از ذخيره کردن بايد مطمئن شد که آيا شئ PostedFile به چيزی اشاره می کند و يا اينکه تهی است. برای اين منظور کد مربوط به ذخيره سازی را در شرط زير قرار می دهيم:
If Not (MyInputFile.PostedFile Is Nothing) Then


و درصورت صحيح بودن شرط، اقدام به ذخيره سازی می نماييم. متد SaveAs شئ PostedFile دارای پارامتری است که محل و نام فايلی که قرار است بر روی سرور ذخيره شود را مشخص می کند. در انتها نيز پيغامی مبنی بر اينکه فايل با موقيت ذخيره شده است را به کاربر می دهيم.
Response.write("Your File was saved on the server successfuly...")


بنابراين کد طرف سرور به صورت زير خواهد بود:
<script language="vb" runat="server">
   sub page_load(s as object,e as EventArgs)
      If Not (MyInputFile.PostedFile Is Nothing) Then
         MyInputFile.PostedFile.SaveAs("c:\filename.ext")
         Response.write("Your File was saved on the server...")
      End If
   end sub
</script>


چند نکته
ديگر خصوصيات شئ PostedFile به صورت زير است:
• ContentLength: به اندازه فايل ارسالی اشاره ميکند.
• ContentType: MIME فايل ارسالی را مشخص می کند که در تشخيص نوع فايل دريافتی کمک می کند.
(بعضی از انواع رايج MIME عبارت اند از : text/plain ، image/gif ، image/jpeg ، audio/mpeg ، application/msword ، application/octed-stream ، video/mpeg ، audio/wav و...)
• FileName: نام فايل و مسير آن در کامپيوتر شخص کاربر را معين می کند.(مانند C:\images\personal\myface.jpg)
• InputStream: يک شئ stream که به فايل upload شده اشاره می کند و آنرا برای خواندن محتوايش آماده می سازد.


يک نکته مهم
توجه کنيد که به طور پيش فرض طول داده های ارسالی در يک request حداکثر 4096 بايت (يا همان 4 kb ) می باشد. بدين معنی که يک فايل ارسالی حداکثر می تواند 4 kb باشد. برای اينکه اين مقدار را به مقدار لازم و مورد نياز افزايش دهيد بايد در فايل web.config ويا machine.config در قسمت <system.web> در صورتيکه قسمت زير موجود نيست آنرا اضافه کنيد
<httpRuntime maxRequestLength="1000000"/>


ودر صورت وجود مقدار maxRequestLength را به مقدار دلخواه تنظيم کنيد. اين مقدار بر حسب بايت می باشد. در مثال بالا مقدار ماکزيمم فايل ارسال يک ميليون بايت (حدود 1 MGB) می باشد. به عنوان نمونه يک فايل web.config که فقط نياز فوق را برآورده سازد به صورت زير خواهد بود:
Configuration file : web.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration >
   <system.web> 
      <httpRuntime maxRequestLength="1000000" /> 
   </system.web>
</configuration>


منقول از آسان دانلود






آموزش ASP.NET

آموزش ASP.NET




codebehind چیست؟


ررسی مفهوم codebehind و مزايا و نحوه بکارگيری و پياده سازی آن به سه روش مختلف 
codebehind اصطلاحی است که به مجموعه کدهای برنامه ای که يک فرم وب (يا سرويس وب يا کنترل کاربری يا ديگر اشياء ASP.NET) استفاده می کند می گويند. اين کدها درون فايل ASPX (يا ASMX يا ASCX) نبوده بلکه درون فايل ديگری با پسوند aspx.cs-برای #C (برای VB.NET بصورت aspx.vb) قرار می گيرند. جداسازی کد برنامه از عبارات HTML در يک فرم وب دارای محاسن و مزيتهای بسيار زيادی است. برخی از اين مزيتها عبارتند از:
• امکان جداسازی تيمهای توليد يک سايت وب بدين صورت که طراحان صفحات می توانند بدون آنکه کاری به کدهای برنامه صفحه داشته باشند يا آسيبی به آن برسانند با عبارات HTML مربوطه کار کنند.
• حفاظت و امنيت برنامه
• پشتيبانی بسيار خوب محيط VS.NET (ويژوال استوديو دات نت) از اين مفهوم
• سرعت توليد سايتهای وب
• نگهداری آسان سايتها و برنامه های ايجاد شده


VS.NET تقريبا هيچگونه امکاناتی را جهت استفاده از بلوکهای <Script runar="server"> که مفهوم مقابل codebehind است را ندارد.


حال که با مزايای codebehind آشنا شديم، سوال بعدی اين است که اين مفهوم چگونه کار می کند؟ در ASP.NET همه چيز شئ يا object می باشد. در ASP.NET حتی يک صفحه ASPX بدون هرگونه کد و برنامه هم يک شئ می باشد که از کلاس System.Web.UI.Page به ارث گرفته شده است. هنگامی که صفحه مذکور برای اولين بار فراخوانی (اجرا) می شود محتويات آن صفحه توسط هسته ASP.NET کامپايل شده و نسخه کامپايل شده آن تا زمانی که تغييری در صفحه ايجاد نشده است، جهت فراخوانی های بعدی در سيستم cache می شود.


از آنجا که يک صفحه ASPX بصورت شئ عمل می کند لذا ما می توانيم بخوبی از مفهوم وراثت در برنامه نويسی شئ گرا بهره ببريم. بدين صورت که می توانيم کلاس پدر آن را بطور دلخواه تعريف و پياده سازی کنيم بشرطی که اين کلاس پدر خود بنوعی از کلاس System.Web.UI.Page به ارث گرفته شده باشد.

کلاس codebehind
بجای اينکه صفحه ASPX شما مستقيما از کلاس System.Web.UI.Page به ارث گرفته شود، صفحه شما می تواند از يک کلاس دلخواه ديگر بصورت زير به ارث گرفته شود:
<%@ Page Inherits="YourNamespace.NewPage" %>


بمنظور عمل نمودن عبارت فوق، کلاس NewPage بايد بصورت مستقيم يا غير مستقيم از کلاس System.Web.UI.Page به ارث گرفته شده باشد. هنگام فراخوانی صفحه فوق، هسته ASP.NET در شاخه bin\ يا اسمبلی سراسری cache شده (Global Assembly Cache) بدنبال کلاس NewPage می گردد و در صورتيکه آن را پيدا نکند خطائی را اعلام می کند. با استفاده از اين روش می توان يک کلاس پايه بدين منظور در سراسر يک برنامه يا سايت وب داشت بطوريکه همه صفحات از آن کلاس به ارث گرفته شوند. بعنوان مثال مجله الکترونيکی angryCoder از همين روش استفاده کرده است. بهرحال بيشتر برنامه ها از کلاس های متفاوتی جهت کلاس codebehind صفحات خود استفاده می کنند.


شما می توانيد فايلی را که محتوی codebehind شماست را به هسته ASP.NET معرفی کنيد. اين معرفی سبب می شود که ASP.NET خود بقيه کارهای لازم (کامپايل کردن فايل codebehind و قرار دادن حاصل آن که در اصل يک فايل dll است در شاخه bin\ برنامه) را انجام دهد. اين کار را با استفاده از مشخصه Src بصورت زير می توانيد انجام دهيد:
<%@ Page Src="NewPage.aspx.cs" Inherits="YourNamespace.NewPage" %>


اگر از VS.NET استفاده می کنيد بصورت پيش فرض مقدمات استفاده از codebehind برای شما بصورت زير فراهم شده است:
<%@ Page Codebehind="NewPage.aspx.cs" Inherits="YourNamespace.NewPage" %>


VS.NET کليه فايلهای codebehind را در قالب يک فايل dll يا اسمبلی کامپايل کرده و حاصل را در شاخه bin\ موجود در شاخه اصلی برنامه يا سايت قرار می دهد. دقت داشته باشيد که الويت مشخصه Src از مشخصه Codebehind بالاتر است و در صورت استفاده همزمان از آنها در دايرکتيو Page، فايل معرفی شده در عبارت Src بعنوان فايل codebehind در نظر گرفته می شود.


خلاصه
با توجه به مطالب فوق، سه روش جهت معرفی codebehind وجود دارد. روش اول بدين صورت است که با فرض موجود بودن dll مربوطه در شاخه bin\، تنها به ذکر نام کلاس codebehind در عبارت Inherits اکتفا نمائيم. روش دوم استفاده از مشخصه Src جهت معرفی نام فايل codebehind است. اين روش سبب می شود تا ASP.NET با استفاده از کامپايلر JIT محتوای فايل codebehind را قابل استفاده نمايد. روش سوم که روش VS.NET است از مشخصه Codebehind استفاده می کند. اين روش همانند روش اول است با اين تفاوت که خود VS.NET کليه کارهای لازم را بصورت خودکار برای ما انجام می دهد


نقل از آسان دانلود










نویسه جدید وبلاگ

آموزش ASP.NET



معماری فایل ASP.NET


آشنايی با انواع فايل و پسوندهای آنها در برنامه های کاربردی ASP.NET. 
در عمل و ساختار برنامه های کاربردی ASP.NET از فايل های زيادی استفاده می شود. در ادامه فايل های تشکيل دهنده برنامه کاربردی ASP.NET را فهرست و نقش آنها در برنامه را خواهيم ديد.


asax.
اين پسوند برای فايل خاصی بنام Global.asax استفاده می گردد. اين نوع فايل محتوی ترکيب نحوی رويداد برای نوشتن رويدادهای سطح برنامه کاربردی ASP.NET است. آن را می توان در دايرکتوری ريشه يک برنامه کاربردی ASP.NET پيدا کرد.


ascx.
اين نوع فايل نمايانگر يک کنترل تعريف شده توسط برنامه نويس ASP.NET است (User Control). صفحات ASP.NET عموما از کنترلهای سرويس دهنده (کادرهای متنی، کادرهای فهرست، دکمه ها و غيره) تشکيل شده اند که عناصر اوليه صفحه وب را می سازند. ASP.NET درست مانند برنامه سازی مرسوم ويژوال بيسيک امکان ايجاد کنترلهای تعريف شده توسط برنامه نويس را فراهم می کند. اين کنترل ها معمولا از ترکيب کنترل های سرويس دهنده و برنامه سازی برای انجام يک وظيفه يا مجموعه ای از وظايف بخصوص تشکيل می شوند.


asmx.
اين پسوند برای سرويس های XML وب استفاده می گردد. اين نوع فايل از سوی آن دسته از سرويس های وب ميزبان مورد استفاه قرار می گيرد که از راه دور يا بطور محلی در معرض برنامه های کاربردی NET. هستند. سرويس وب موجوديتی قابل برنامه ريزی است که برای برنامه کاربردی يک عنصر خاص کارکرد معينی را تامين می کند.


aspx.
از اين پسوند که اصلی ترين پسوند ASP.NET است برای فرم های وب و صفحات معمولی ASP.NET استفاده می گردد.

axd.
اين نوع فايل مربوط به tracing برنامه کاربردی ASP.NET است و به ASP.NET اجازه می دهد تا به جمع آوری اطلاعات درباره درخواستهای HTTP برای يک برنامه کاربردی بپردازد.


vsdisco.
اين نوع فايل XML، لينک ها را در معرض منابع ديگری قرار می دهد که سرويس وب را توصيف می کنند. از فايل VSDISCO برای کشف سرويس های وب استفاده می شود که بطور عمومی موجود هستند.


htm.
فايل های معمولی از نوع HTML را در برمی گيرند.


xml.
اين نوع سند XML مخصوص استفاده در برنامه های کاربردی ASP.NET است. اين فايل XML برای مقاصد مختلفی استفاده می شود از جمله نگهداری اطلاعات برنامه کاربردی و نيز مجموعه داده های بازگشته از بانک اطلاعاتي.


vb.
اين فايل شامل کد ويژوال بيسيک است که آن نيز به نوبه خود به يک فايل ASPX يا ASCX به ارث می رسد و کليه عمليات برنامه ای مربوط به صفحات ASP.NET در آن قرار می گيرد. اين نوع فايل اصطلاحا code-behind نيز ناميده می شود.


cs.
همانند پسوند vb. است اما بجای کد ويژوال بيسيک حاوی کد زبان #C است.


config.
پسوند فايل web.config است.اين نوع فايل بر يک فايل پيکربندی دلالت دارد يعنی فايلی که از آن برای تعيين صفات مشخصه مختلف برنامه کاربردی استفاده می شود. اين صفات مشخصه شامل تنظِمات اشکال زدايي(debuging)، تائيد امنيت(authentication)، کارکرد پيگيری (tracing)، نگهداری جلسه کاری (state management) و عمومی سازی (globalization & localization) می شوند.






ارسال نامه در ASP.NET

آموزش ASP.NET


ارسال نامه در ASP.NET


در اين مقاله ياد خواهيم گرفت که چگونه می توان از طريق يک صفحه ASP.NET يک Email فرستاد. 
يکی از پر کاربردترين سرويسها بر روی اينترنت ارسال email می باشد که ميخواهيم به آن بپردازيم. در دات نت برای اين عمل بايد از نامکده System.Web.Mail استفاده نمايم و به منظور وارد کردن آن از کد زير استفاده مينمايم.
<%@ Import Namespace="System.Web.Mail" %>


همانطور که می دانيد در زبانهای شئ گرا برای استفاده از اشيا بايد ابتدا از آنها يک کپی يا در اصطلاح Instance برداشت به اين منظور از کد زير استفاده می نماييم.
Dim mail As New MailMessage


حال نوبت به استفاده از خواص و متدهای شئ کپی برداری شده می باشد، که اجزا مهم آن به شرح زير می باشد:


mail.From: آدرس فرستنده email
mail.To: آدرس گيرنده email
mail.Subject: موضوع
mail.Body: متن email که می تواند به صورت HTML باشد 
mail.BodyFormat: نوع ساختار متن را مشخص می کند
SmtpMail.SmtpServer: سرويس دهنده محلی (Local) شما می باشد
SmtpMail.Send(mail): متد برای ارسال در انتهای کار


در اينجا يک مثال مشاهده می کنيد که با استفاده از فرم و دکمه Submit يک آدرس پست الکترونيکی را دريافت کرده و پيام پيش فرض را به آن ارسال می دارد. توجه داشته باشيد که در اينجا از يک صفحه برای هر دو عمليات دريافت آدرس و ارسال استفاده شده و با استفاده از يک کنترل Label که از کنترل های سرور در دات نت می باشد نشان ميدهيم که در حال دريافت آدرس هستيم يا ارسال.

<%@ Page Language="VB" EnableSessionState="False" EnableViewState="False" Trace="False" Debug="False" Strict="True" %>
<%@ Import Namespace="System.Web.Mail" %> 
<script language="VB" runat=server> 
Sub Page_load(Sender as Object, E as EventArgs)


    If request.form("EmailAddress") = "" Then
        dim strResponse as string = "<h2>Send Email using ASP.NET formatted in HTML</h2>"
        lblMessage.Text = strResponse
    Else
        dim strResponse as string = "You just sent an email message formatted in HTML to:<br><h2>" &request("EmailAddress") & "</h2>"
        lblMessage.Text = strResponse
    End If


End Sub


Sub btn_Click(sender as Object, e as System.EventArgs)
    If request.form("EmailAddress") <> ""
        Dim mail As New MailMessage
        mail.From = youraddress@domain.comThis email address is being protected from spam bots, you need Javascript enabled to view it
        mail.To = request.form("EmailAddress")
        mail.Subject = "Message sent using ASP.NET and CDONTS"
        mail.Body = "HTML Message sent from Iranasp.net using ASP.NET and Cdonts<br>Wonder how this is done?<br><br>Wonder How to setup CDONTS?"
        mail.BodyFormat = MailFormat.Html
        SmtpMail.SmtpServer = "LocalServerName"
        SmtpMail.Send(mail)
    End If
End Sub
</script> 
<html>
<head>
</head>
<body>
<h1 align="center">Sending Email via ASP.NET and CDONTS..</h1>
<b>How do I setup my server to use CDONTS?</b>
<br/>
<br/>
<br/>
<br/>
<asp:Label id="lblMessage" Font-Name="Verdana" Width="400px" BorderStyle="solid" BorderColor="#cccccc" runat="server"/>
<form method="post" name="form1" runat="server" runat="server">
Email Address:<input type="text" name="EmailAddress" size="30" value=""><br><br>
<input type="Submit" id="btnSubmit" OnServerClick="btn_Click" value="Sending Email with ASP.NET" name="b1" runat="server" />
</form>
</body>
</html>






آموزش ASP.NET

آموزش ASP.NET

ویژگیهای امنیتی ASP.NET


بررسی مختصر مساله امنيت در برنامه های ASP.NET در نحوه ارتباط آن با کاربر 
مقدمه
امنيت يکی از مسائل اصلی برای توسعه دهندگان و معماران برنامه های کاربردی است. همانطور که تعداد بيشماری از سايتهای وب با انواع امنيت ها مورد نياز است، توسعه دهندگان نيز بايد بدانند چگونه با مقوله امنيت کار کنند و چه مدل امنيتی مناسبی برای برنامه های کاربرديشان انتخاب کنند.


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


تفاوت جريان امنيتی ASP و ASP.NET
جريان امنيتی صفحات ASP.NET از جريان امنيتی ASP کلاسيک متفاوت است. در ASP، بصورت پيش فرض IIS خود را به عنوان يک کاربر معتبر معرفی می نمايد در حاليکه در ASP.NET توسعه دهنده کنترل بيشتری بر روی تنظيم امنيت در سطوح مختلف را دارا می باشد.

عمليات اساسی امنيتی ASP.NET


Authentication: عبارت است از روند اعتباردهی هويت يک کاربر به پذيرفتن يا رد کردن يک درخواست، يعنی دريافت گواهی نامه ها (برای مثال نام کاربر و کلمه عبور) از کاربران و اعتبار دهی آن. بعد از اينکه هويت بررسی شد و معتبر تشخيص داده شد، کاربر بصورت قانونی مطرح می شود و درخواست های دسترسی به منابع انجام می شود. بصورت ايده آل درخواست های آتی همان کاربر تا هنگام خروج از سيستم مرتبط با روند Authentication نيست.


Authorization: عبارت است از روند تضمين نمودن اينکه کاربران با هويت های معتبر مجاز به دسترسی به منابع مشخصی هستند.


Impersonation: اين روند يک برنامه کاربردی را قادر می سازد تا به نوبت هويت کاربر و درخواستهای بعدی او برای ساير منابع را تضمين کند. دسترسی به منابع متناسب با هويت کاربری که جايگزين شده است (Impersonated) تاييد يا رد می گردد. به عبارت ديگر Impersonation يک پروسه سرويس دهنده (Server Process) را قادر می سازد تا با استفاده از امنيت گواهی نامه سرويس گيرنده ها (Client) اجرا شود.








نویسه جدید وبلاگ

آموزش ASP.NET


نکاتی جهت بهینه سازی برنامه های ASP.NET


در اين مقاله با نکاتی آشنا می شويد که جهت بهينه سازی و افزايش کارآيی و سرعت برنامه های ASP.NET لازم می باشند. 
اگرچه ASP.NET مدل جديدی از برنامه نويسی تحت وب می باشد و آمده است که نواقص و کمبودهای قبلی را برطرف نموده و به کارآيی برنامه های تحت وب بيافزايد، اما شما همچنان نياز داريد که جهت کارآيی و بهينه بودن برنامه هايتان نکاتی را رعايت کنيد. اين نکات جهت افزايش کارآيی، سرعت و صرفه جويی در مصرف منابع بر روی سرور است. جهت دستيابی به ليست کامل و مفصل اين نکات به اين آدرس در سايت MSDN مراجعه نمائيد. چکيده برخی از اين نکات بشرح زير است:


Session State را در صورت عدم نياز حتما غيرفعال نمائيد.
بصورت پيش فرض وضعيت Session State برای هر صفحه فعال است. اگر مطمئن هستيد که در آن صفحه از متغيرهای Session استفاده نمی کنيد، حتما آن را در دايرکتيو Page بالای صفحه تان با قراردادن آن برابر False غيرفعال کنيد تا بدين ترتيب منابع اضافی در سرور مصرف نشود. اگر هم مطمئن هستيد که در کل برنامه يا سايت تان نمی خواهيد از متغيرهای Session استفاده کنيد می توانيد آن را در web.config بطور کلی غيرفعال کنيد.


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


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

از Page.IsPostback استفاده کنيد.
استفاده از Page.IsPostback سبب کاهش رفت و برگشت های (round trip) اضافی می گردد. همچنين به شما کمک می کند که تشخيص دهيد چه موقع نياز به توليد داده جديد برای يک صفحه داريد.


تا آنجائيکه ممکن است از View State استفاده نکنيد.
View State هم مانند Session State برای نگهداری اطلاعات و سابقه يک فرم از منابع سرور استفاده کرده و به حجم صفحات اضافه می کند. از طرفی اين حالت بصورت پيش فرض فعال می باشد. لذا در صورتيکه به آن نياز نداريد از آن استفاده نکنيد و حالت آن را غيرفعال نمائيد.


از Strict="true" در صفحات تان استفاده کنيد.
جهت استفاده از مزايای early binding از عبارت فوق در دايرکتيو Page استفاده کنيد. اين مساله سبب می شود تا شما مجبور شويد تايپ هر متغير را در لحظه تعريف آن متغير بصورت صريح مشخص کنيد. همانطور که می دانيد درVB.NET و JScript.NET جهت پوشش برنامه های ASP کلاسيک که بدون تايپ بود، می توانيد تايپ يک متغير را در لحظه تعريف آن مشخص نکرده بلکه بعدا هنگام انتساب مقادير به آن، اين کار (تعيين تايپ) بصورت خودکار انجام شود. اين مساله سبب صرف منابع اضافی در سرور می گردد.


از Stored Procedure استفاده کنيد.
اگر از بانک اطلاعاتی در برنامه تان استفاده می کنيد، سعی کنيد که حتما پرس و جوهای (query) خود را به روال های ذخيره شده (stored procedure) بسپاريد. از آنجائيکه اين روال ها برای مراجعه اول کامپايل شده و از آن پس جهت اجرا در اختيار مدير بانک اطلاعاتی (DBMS) قرار می گيرد، نسبت به پرس و جوهای معمولی درون برنامه ای بسيار کاراتر و سريعتر هستند. از طرفی با بهينه سازی خاصی که برای گرداننده (driver) SQLServer در مجموعه دات نت شده است، سرعت اجرای روال های ذخيره شده نسبت به روش های معمولی OLEDB يا ODBC بيش از دو الی سه برابر می باشد.


از Data Reader استفاده کنيد.
اگر حجم بالائی از داده نداريد يا تنها می خواهيد از بانک اطلاعاتی عمل خواندن را انجام دهيد حتما از Data Reader استفاده کنيد. استفاده از Data Set سبب کندی کار و مصرف بالای منابع می گردد.


از Caching استفاده کنيد.
Caching شاهکار ASP.NET است. تا آنجائيکه ممکن است از caching استفاده کنيد. استفاده از caching سبب می شود تا از توليد مجدد کد HTML لازم برای يک صفحه تکراری جلوگيری شده و کاربر هم صفحات را خيلی سريعتر دريافت کند.


حالت Debug را غيرفعال کنيد.
هنگاميکه کار برنامه نويسی شما تمام شده است و زمان استفاده واقعی از برنامه فرا رسيده است، فراموش نکنيد که حالت Debug در کامپايل نهائی برنامه تان را غيرفعال نمائيد.






نویسه جدید وبلاگ

تدریس ASP.NET


ساخت وب سایت با قابلیت آژاکس


این مقاله چگونگی ایجاد یک Web application با قابلیت AJAX را توضیح می دهد که که می تواند بعنوان یک لیست to-do یا لیست کارها کار کند. این مقاله به شما کمک می کند یک user interface پایه برای ایجاد، مدیریت، و حذف لیست ها و آیتم های موجود در آن لیست ها ایجاد کنید. تمامی عملیاتهای insert، update، delete، sort، و paging درون یک کنترل اجرا می شود که از Microsoft Ajax استفاده می کند.

می توانید از کنترل UpdatePanel برای فعال سازی postbackهای غیرهمزمان روی صفحه استفاده کنید. ASP.NET بطور پیش فرض، هنگام روی دادن یک postback، کل صفحه را refresh می کند. اما، هنگامی که از کنترل UpdatePanel برای ایجاد postbackهای غیر همزمان استفاده می کنید، فقط عنصرهایی که درون کنترل UpdatePanel هستند، تغییر می کنند. این کار باعث می شود صفحه دینامیک تر شود و سرعت بیشتری داشته باشد.

  • taskهای آورده شده در این مقاله شامل موارد زیر است:
  • ایجاد یک بانک اطلاعاتی SQL و اضافه کردن داده ها.
  • اضافه کردن یک کنترل LinqDataSource به صفحه.
  • اضافه کردن یک فایل LINQ to SQL Classes.
  • استفاده از کنترل LinqDataSource برای اتصال به بانک اطلاعاتی با استفاده از LINQ.
  • استفاده از کنترل UpdatePanel برای اضافه کردن قابلیت Ajax به صفحه.

پیش نیازها:

جهت تکمیل مقاله، به نرم افزارهای زیر احتیاج داریم:

  • Microsoft Visual Studio یا Visual Web Developer 2010 Express.
  • SQL Server Express نصب شده روی کامپیوتر.

 

ایجاد یک وب سایت

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

این مقاله از پروژه Web site استفاده می کند. در عوض می توانید از پروژه Web application استفاده می کند.

ایجاد یک file system Web site جدید

  • در Visual Web Developer، در منوی File، روی New Web Site کلیک کنید.
  • پنجره New Web Site نمایش داده می شود.

    زیر Visual Studio installed templates، روی ASP.NET Web Site کلیک کنید.

  • در باکس Location، روی File System کلیک کنید، و نام پوشه ای را که می خواهید صفحات وب سات را در آن نگه دارید، تایپ کنید.
  • در لیست Language، روی Visual Basic یا Visual C# کلیک کنید و سپس OK کنید.

image

Visual Web Developer، پوشه و صفحه ای جدید بنام Default.aspx ایجاد می کند.

 

ایجاد بانک اطلاعاتی جدید در SQL Server

حالا که وب سایتی را ایجاد کرده اید، مرحله بعدی ایجاد بانک اطلاعاتی و یک مرجع به آن در Server Explorer است. (در Visual Web Developer 2008 Express Edition، نام Server Explorer، Database Explorer است.) وقتی یک بانک اطلاعاتی به Server Explorer اضافه می کنید، می توانید از Visual Studio برای اضافه کردن جداول، رویه های ذخیره شده (stored procedure)، viewها، و غیره استفاده کنید. همچنین می توانید داده های جدول را مشاهده کنید یا queryهای خودتان را بطور دستی یا گرافیکی یا با استفاده از پنجره Query Builder، ایجاد کنید.

اضافه کردن بانک اطلاعاتی به پروژه

  • در Solution Explorer، روی نام وب سایت کلیک راست و روی Add New Item کلیک کنید.
  • پنجره Add New Item نمایش داده می شود.

    SQL Database را انتخاب کنید، و نام بانک اطلاعاتی را Tasks.mdf بگذارید، و سپس OK کنید.

  • وقتی Visual Studio  می پرسد آیا بانک اطلاعاتی باید در پوشه App_Data ذخیره شود، YES را کلیک کنید.

 

ایجاد یک Schema و Sample Data برای بانک اطلاعاتی

می توانید از database design و ویژگی های ویرایش برای ایجاد یک schema برای جدول جدید استفاده کنید که آیتم های task را ذخیره می کند.

  • در Solution Explorer، پوشه App_Data را باز منید و روی Tasks.mdf دابل کلیک کنید.
  • نمودار درختی بانک اطلاعاتی taskها در Server Explorer (یا Server Explorer) نمایش داده می شود.

    روی پوشه Tables کلیک راست و سپس روی Add New Table کلیک کنید.

  • در ویرایشگر جدول بانک اطلاعاتی، ستون های زیر را در جدول ایجاد کنید:

 image

  • روی ردیفی که حاوی taskid است، کلیک راست کنید و سپس روی Set Primary Keyکلیک کنید.
  • در حالیکه ردیف taskid هنوز در حالت انتخاب است، در تب Column Properties، بخش Identity Specification را باز کنید و سپس (Is Identity) را روی Yes تنظیم کنید.
  • جدول را ذخیره کنید و نام آنرا TasksList بگذارید.
  • در Server Explorer، روی جدول کلیک راست و روی Show Table Data، کلیک کنید.
  • پنجره ای نمایش داده می شود که می توانید داده ها را مشاهده و اضافه کنید.

    چهاریا پنج رکورد به جدول اضافه کنید، و سپس database designer را ببندید.

مجبور نیستید value برای taskid تعیین کنید، زیرا یک identity column است که value آن بطور اتوماتیک تخصیص داده می شود. باید False یا True بودن فیلد isComplete را مشخص کنید.

 

ایجاد کنترل های Data Access

در این بخش، از کنترل LinqDataSource استفاده می کنیم و کلاس هایی را ایجاد می کنیم که موجودیت های بانک اطلاعاتی (database entities) را نمایش می دهد. کنترل و کلاس ایجاد شده، لایه data-access هستند که در این مقاله مورد استفاده قرار می گیرند.

کنترل LinqDataSource، از طریق معماری کنترل ASP.NET data-source control، LINQ را expose می کند. کنترل LinqDataSource، کد select کردن، update کردن، delete کردن اشیاء بانک اطلاعاتی را ایجاد می کند. LINQ، اصول برنامه نویسی شی گرا را به داده های رابطه ای اعمال می کند. این کنترل مدل برنامه نویسی یکپارچه ای را برای query و update کردن داده ها از انواع مختلف منابع داده ها فراهم می کند و قابلیت های داده ها را مستقیماً به زبان های C# و Visual Basic، اکستند (extend) می کند.

mapping بانک اطلاعاتی Taskها به SQL Data Context Object

جهت شروع ایجاد لایه data access، باید یک typed dataset به پروژه اضافه کنید.

ایجاد کلاسی برای جدول TasksList

  • اگر وب سایت از قبل دارای پوشه App_Code نیست، در Solution Explorer، روی نام وب سایت کلیک راست، و روی Add ASP.NET Folder ، و سپس روی App_Code کلیک کنید.
  • روی پوشه App_Code راست کلیک و سپس روی Add New Item کلیک کنید.
  • زیر Visual Studio installed templates، گزینه LINQ to SQL Classes را انتخاب کنید، و فایل را به Tasks.dbml تغییر نام دهید، و سپس روی Add کلیک کنید.

پنجره Object Relational Designer نمایش داده می شود.

  • در Server Explorer، جدول TasksList را به پنجره Object Relational Designer درگ کنید.
  • فایل Tasks.dbml را ذخیره کنید.

وقتی فایل را ذخیره می کنید، Visual Studio  دو فایل در پوشه App_Code زیر Tasks.dbml ایجاد می کند. فایل اول، Tasks.dbml.layout است؛ و فایل دوم، بسته به زبانی که هنگام ایجاد فایل Tasks.dbml انتخاب کرده اید، Tasks.designer.cs یا Tasks.designer.vb است،.

  • در Solution Explorer، فایل Tasks.designer.cs یا Tasks.designer.vb را باز کنید.

دقت کنید که این کد حاوی کلاس هایی بنام TasksDataContext و TasksList است. کلاس TasksDataContext، نمایانگر بانک اطلاعاتی و کلاس TasksList، نمایانگر جدول بانک اطلاعاتی است. constructor بدون پارامتر کلاس TasksDataContext، کانکشن استرینگ را از فایل Web.config می خواند.

  • فایل Web.config را باز کنید.

دقت کنید که رشته اتصال به بانک اطلاعاتی Tasks.mdf، در عنصر connectionStrings اضافه شده است.

  • فایل کلاس، پنجره Object Relational Designer، و فایل Web.config را ببندید.

 

 

ایجاد و پیکر بندی کنترل LinqDataSource

حالا که یک جدول بانک اطلاعاتی و کلاس هایی دارید که نمایانگر موجودیت های بانک اطلاعاتی هستند، می توانید از کنترل LinqDataSource روی صفحه وب ASP.NET استفاده کنید تا به بانک اطلاعاتی دسترسی پیدا کنید.

  • صفحه Default.aspx را باز کنید.
  • به viewی Design، سوییچ کنید.
  • یک کنترل LinqDataSource روی صفحه درگ کنید.

می تو انید پراپرتی ID را بصورت LinqDataSource1، ترک کنید.

  • در پنل اسمارت تگ LinqDataSource Tasks، روی Configure Data Source کلیک کنید.

 

 image

  • در لیست Choose your context object، گزینه TasksDataContext انتخاب و سپس روی Next. کلیک کنید.
  • در لیست Table، گزینه TasksLists(Table<TasksList>) را انتخاب و سپس روی Finish کلیک کنید.
  • در منوی LinqDataSource Tasks، گزینه های Enable Delete، Enable Insert، و Enable Update را انتخاب کنید.

توجه داشته باشید که مجبور به تعیین هیچ database commands برای select کردن داده ها نیستید.

  • صفحه را ذخیره کنید.

 

 

استفاده از کنترل های Data Source

در این بخش، کنترل هایی را به صفحه ای که از فایل کلاس های LINQ to SQL استفاده می کند، اضافه می کنیم، که جدول بانک اطلاعاتی به کلاس ها را map می کند. همچنین می توانید از کنترل LinqDataSource برای ایجاد data application پایه استفاده کنید.

می توانید یک کنترل ListView جهت نمایش داده ها از بانک اطلاعاتی SQL server، اضافه کنید. سپس می توانید یک کنترل DropDownList برای فیلتر کردن داده های اضافه کنید که در کنترل ListView ظاهر می شوند. در ادامه مقاله، باید کنترل ها را در کنترل UpdatePanel قراردهید تا بتوانید قابلیت های postback غیر همزمان را اضافه کنید.

نمایش داده ها با کنترل ListView

کنترل ListView برای نمایش داده ها در هر ساختار تکرارشونده مفید است، مانند کنترل های DataList و Repeater. اما کنترل ListView، برعکس این کنترل ها، ، عملیات های edit، insert، و delete و همچنین sorting و paging را ساپورت می کند.

می توانید یک کنترل ListView اضافه کنید که همه taskها را نشان می دهد. بعداً، می توانید یک لیست drop-down اضافه کنید که به شما اجازه فیلتر کردن داده ها را می دهد. کنترل ListView، به نمایش داده ها شکل می دهد و دکمه هایی را نشان می دهد که می توانند برای ویرایش و آپدیت کردن محتوا، یا قراردادن (insert) محتویات جدید مورد استفاده قرار گیرند.

اضافه کردن کنترل ListView به صفحه

  • صفحه ای را که کنترل LinqDataSource را اضافه کرده اید، باز کنید.
  • در تب Data در Toolbar، کنترل ListView را روی صفحه درگ کنید.
  • در منوی ListView Tasks، در لیست Choose Data Source، گزینه LinqDataSource1 را انتخاب کنید.
  • این کار، ListView را به کنترل LinqDataSource، که قبلاً پیکربندی کرده اید، بایند (bind) می کند.

  • در پنل اسمارت تگ LinqDataSource Tasks، روی Configure ListView کلیک کنید.
  • در پنجره Configure ListView، گزینه های Enable Editing، Enable Inserting، Enable Deleting، و Enable Paging را انتخاب کنید.
  • روی OK کلیک کنید.
  • صفحه را ذخیره کنید.

 

اضافه کردن کنترل DropDownList جهت فیلتر کردن داده ها

می توانید داده هایی را که در کنترل ListView، از طریق ایجاد یک لیست drop-down نمایش داده می شود، فیلتر کنید - که به شما اجازه می دهد taskهایی را که قرار است نشان دهید، انتخاب کنید. مثلاً می توانید لیستی ایجاد کنید که یا taskهای فعال یا taskهایی را که تکمیل شده اند، نشان می دهد.

می توانید کد را در کنترل ListView قراردهید تا بطور اتوماتیک یک عبارت Where، بمنظور نمایش رکوردهایی که با selection کنترل DropDownList مچ هستند، ایجاد شود.

اضافه کردن یک کنترل جهت فیلتر کردن داده ها

  • صفحه Default.aspx را باز کنید، و به ویووی Source سوییچ کنید.
  • درون عنصر فرم و بالای کنترل ListView، مارک آپ های زیر را دنبال کنید:

 

  • <span id="filter">
    Current List Filter:
    <asp:DropDownList ID="DropDownList1"
    AutoPostBack="true"
    runat="server">
    <asp:ListItem Text="Active" Value="False" />
    <asp:ListItem Text="Completed" Value="True" />
    </asp:DropDownList>
    </span>
    <hr id="separator" />

  • در کنترل LinqDataSource، پراپرتی AutoGenerateWhereClause را روی true تنظیم کنید، همانگونه که در مثلازیر نشان داده شده:
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="TasksDataContext"
    TableName="TasksLists"
    EnableDelete="True"
    EnableInsert="True"
    EnableUpdate="True"
    AutoGenerateWhereClause="true" >

  • مارک آپ زیر را به پارامترهای Where، بین تگ های opening و closing کنترل LinqDataSource اضافه کنید.
    <WhereParameters>
    <asp:ControlParameter
    Name="isComplete"
    ControlID="DropDownList1"
    Type="Boolean" />
    </WhereParameters>

  • صفحه را ذخیره کنید.

 

 

حالا می توانید صفحه را تست کنید تا مطمئن شوید داده هایی را که انتخاب کرده اید، نمایش می دهد.

تست کردن صفحه

  • CTRL و F5 را جهت نمایش صفحه در مرورگر فشار دهید.
  • Completed را از لیست drop-down انتخاب کنید.

شما فقط آن taskها را خواهید دید که بصورت complete مارک خورده اند.

 

اضافه کردن قابلیت AJAX به صفحه

در این بخش، جهت فعال کردن ویژگی هایAJAX ، یک کنترل به صفحه اضافه می کنیم. سپس یک کنترل UpdatePanel به صفحه اضافه می کنیم، که اجازه اجرای taskها را در کنترل ListView، بدون postback کامل صفحه، می دهد.

اضافه کردن کنترل ScriptManager

برای استفاده از هر ویژگی ASP.NET AJAX از قبیل کنترل UpdatePanel، باید یک کنترل ScriptManager به صفحه اضافه کنید.

  • 1. صفحه Default.aspx را باز کنید، و به ویووی Source سوییچ کنید.
  • 2. در تب AJAX Extensions در toolbox، روی کنترل ScriptManager راست کنید تا آن را به صفحه درون عنصر فرم اضافه کنید.

قراردادن کنترل ListView درون کنترل UpdatePanel

  • در صفحه Default.aspx، مارک آپ زیر را بلافاصله بعدا از باز کردن تگ <form>اضافه کنید:
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
  • کد زیر را دقیقاً قبل از بستن تگ </form> اضافه کنید:
    </ContentTemplate>
    </asp:UpdatePanel>

این کد، یک کنترل UpdatePanel، اطراف کنترل ListView و کنترل DropDownList قرار می دهد.

  • صفحه را ذخیره کنید.

حالا می توانید دوباره صفحه را تست کنید.

 

تست کردن صفحه

  • CTRL و F5 را جهت نمایش صفحه در مرورگر فشار دهید.

توجه داشته باشید که وقتی Active یا Completed را از list filter انتخاب می کنید، postback کامل اتفاق نمی افتد و کنترل ListView، لیست آپدیت شده ای از داده ها، بدون flicker، را نمایش می دهد.

 

خلاصه

این مقاله چگونگی اضافه کردن ListView به صفحه را با کنترل LinqDataSource، جهت اضافه کردن (add)، اصلاح (modify)، و حذف taskها از بانک اطلاعاتی به شما نشان داد. سپس یاد گرقتید چگونه قابلیت AJAX را با استفاده از کنترل UpdatePanel، اضافه کنید.







آموزش گرافیک در ASP.NET

آموزش ASP.NET



theme، مجموعه ای از تنظیمات پراپرتی است که به شما اجازه می دهد ظاهر صفحات و کنترل ها را تعریف کنید، و آن ظاهر را در صفحات web application، در کل یک web application، یا کل web applicationها روی سرور اعمال کنید.

تم ها و اسکین های کنترل

تم ها از یک سری از عنصرها تشکیل شده اند: اسکین ها، CSS، تصاویر، و منابع دیگر. یک تم حداقل حاوی اسکین ها خواهد بود. تمها در دایرکتوری های ویژه ای در وب سایت یا روی سرور وب شما تعریف می شوند.

اسکین ها

یک فایل اسکین ، دارای اکتنشن .skin و حاوی تنظیمات پراپرتی برای کنترل های منفرد از قبیل Button، Label، Textbox، یا کنترل های Calendar است. تنظیمات Control skin، شبیه control markup هستند، اما فقط حاوی پراپرتی هایی است که می خواهید به عنوان بخشی از تم تنظیم کنید. مثلاً، کد زیر، یک control skin برای کنترل Button است:

<asp:button runat="server" BackColor="lightblue" ForeColor="black" />

 

شما فایل های .skin را در پوشه Theme ایجاد کردید. یک فایل .skin ممکن است حاوی یک یا چند control skin برای یک یا چند control type باشد. می توانید اسکین هایی را در فایلی جدا برای هر کنترل تعریف کنید یا همه اسکین ها را برای یک تم در فایلی واحد تعریف کنید.

دو نوع control skin وجود دارد: اسکین های پیش فرض و اسکین های نام گذاری شده:

  • اسکین پیش فرض: هنگامی که تم به یک صفحه اعمال می شود،بطور اتوماتیک به همه کنترل های یک type، اعمال می شود. یک control skin، یک اسکین پیش فرض است، اگر دارای اتریبیوت SkinID نباشد. مثلاً، اگر یک اسکین پیش فرض برای کنترل Calendar ایجاد کنید، control skin به همه کنترل های Calendar که روی صفحه ای که از تم استفاده می کنند اعمال می شود. (اسکین های پیش فرض، دقیقاً بوسیله control type مچ می شوند، بطوری که اسکین کنترل Button به همه کتنرل های Button اعمال می شود، اما به کنترل های LinkButton یا کنترل هایی که از Button object مشتق می شوند اعمال نمی شود.)
  • اسکین نام گذاری شده: کنترلی با مجموعه پراپرتی های SkinID است. اسکین های نام گذاری شده بطور اتوماتیک به کنتنرل هایی توسط type اعمال نمی شوند. در عوض، اسکین نام گذاری شده را مستقیماً به کنترلی توسط تنظیم پراپرتی SkinID کنترل اعمال می کنید. ایجاد اسکین های نام گذاری شده به شما اجازه می دهند اسکین های مختلفی را برای instanceهای مختلف همان کنترل در یک برنامه تنظیم کنید.

 

CSS

یک تم می تواند حاوی فایل .css نیز باشد. وقتی شما یک فایل .css در پوشه تم قرار می دهید، style sheet بطور اتوماتیک بعنوان بخشی از تم اعمال می شود. شما با استفاده از اکتنشن .css در پوشه تم ، یک style sheet تعریف می کنید.

Theme Graphics و منابع دیگر

همچنین این تم ها ممکن است حاوی graphics و منابع دیگر از قبیل فایل های script، یا فایل های صوتی شود. مثلاً، ممکن است بخشی از تم صفحه شما حاوی یک اسکین برای کنترل TreeView باشد. می توانید graphicهای استفاده شده بمنظور نمایش دکمه expand و دکمه collapse را بعنوان بخشی از تم شامل کنید.

معمولاً فایل های منبع برای تم در همان پوشه ای هستند که فایل های اسکین برای تم وجود دارند، اما می توانند هر جایی در Web application نیز باشند، مثلاً در subfolder پوشه تم .

<asp:Image runat="server" ImageUrl="ThemeSubfolder/filename.ext" />

 

همچنین می توانید فایل های منبع تان را بیرون از پوشه تم نیز ذخیره کنید. اگر از سینتکس tilde (~) برای ارجاع به فایل های منبع استفاده می کنید، Web application بطور اتوماتیک تصاویر را پیدا خواهد کرد. مثلاً اگر منابع یک تم را در یک subfolder برنامه تان قرار دهید، می توانید از مسیرهای فرم ~/SubFolder/filename.ext برای ارجاع به فایل های منبع استفاده کنید، همانطور که در مثال زیر نشان داده شده است.

<asp:Image runat="server" ImageUrl="~/AppSubfolder/filename.ext" />

Scope کردن تم

می توانید تم هایی را برای یک Web applicationواحد، یا بعنوان یک تم جهانی که می تواند توسط همه applicationهای روی Web server استفاده شود، تعریف کنید. بعد از تعریف تم ، می توان آن را با استفاده از اتریبیوت تم یا StyleSheetTheme روی صفحه های مجزا قرار داد، یا می توان با تنظیم عنصر <pages> در پیکر بندی application به همه صفحه های یک application اعمال کنید. اگر عنصر <pages> در فایل Machine.config تعریف شود، تم به همه صفحه ها در Web applicationهای روی سرور اعمال خواهد شد.

تم های صفحه

تم صفحه، یک پوشه تم با control skins، style sheets، فایل های Graphics، و منابع دیگر است که بصورت یک subfolder در پوشه \App_Themes در وب سایت شما ایجاد شده است. هر تم ، یک subfolder متفاوت از پوشه \App_Themes است. مثال زیر، تم یک صفحه معمولی را نشان میدهد، که دو تم بنام های BlueTheme و PinkTheme را تعریف می کند.

MyWebSite
App_Themes
BlueTheme
Controls.skin
BlueTheme.css
PinkTheme
Controls.skin
PinkTheme.css

 

تم های جهانی (global)

تم جهانی، تمی است که می توانید به همه وب سایت های روی سرور اعمال کنید. تم های جهانی به شما اجازه تعریف نمایی کلی برای domain تان، هنگامی که از چندین وب سایت های که روی همان سرور هستند نگهداری می کنید، می دهد.

تم های جهانی، شبیه تم های صفحه هستند که حاوی تنظیمات property، تنظیمات style sheet، و graphic هستند. اما، تم های جهانی در پوشه ای بنام Theme ذخیره می شونده که برای سرور وب، global محسوب می شود. هر وب سایتی روی سرور، و هر صفحه ای در وب سایت، می تواند یک تم جهانی را reference کند.

ارجحیت تنظیمات تم

با تعیین چگونگی اعمال شدن تم، می توانید ارجحیتی را که تنظیمات تم در تنظیمات کنترل محلی می گیرد، مشخص کنید.

اگر پراپرتی تم صفحه را تنضیم کنید، تنظیمات کنترل در تم و صفحه ادغام می شوند تا تنظیمات نهایی برای کنترل را شکل دهند. اگر تنظیمات کنترل هم در کنترل و هم در تم تعریف شوند، تنظیمات کنترل تم هر تنظیمات صفحه ای را روی کنترل override می کند. این استراتژی تم را قادر به ایجاد نمایی ثابت در صفحات می کند، حتی اگر کنترل های روی صفحه از قبل دارای تنظیمات پراپرتی مستقلی باشند. مثلاً، به شما اجازه می دهد تمی را به صفحه ای که در نسخه قبلی ASP.NET ایجاد کرده اید، اعمال کنید.

متناوباً، می توانید تمی را با تنظیم کردن پراپرتی StyleSheetTheme بصورت style sheet اعمال کنید. در این مورد، تنظیمات صفحه محلی، بر تنظیمات تعریف شده در تمی که هنگام تعریف تنظیمات در هر دو جا تعریف شده، ارجحیت دارد. این مدلی است که توسط CSS استفاده می شود. اگر می خواهید حتی هنگامی که تمی را برای نمای کلی اعمال می کنید، قادر به تنظیمات پراپرتی های کنترل های مستقل روی صفحه باشید، ممکن است تمی را بصورت style sheet اعمال کنید.

عنصرهای تم جهانی را نمی توان بصورت جزیی با عنصرهای تم هایی در سطح application جایگزین کرد. اگر تمی در سطح application را هم نام با تم جهانی ایجاد کنید، عناصر تم در تم سطح application، عناصر تم جهانی را override نخواهند کرد.

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

به عنوان یک قانون، می توانید از تم ها برای تعریف پراپرتی هایی استفاده کنید که مربوط به ظاهرصفحه یا کنترل و یا محتویات استاتیک هستند. می توانید فقط پراپرتی هایی را تنظیم کنید که دارای اتریبیوت ThemeableAttribute هستند و در کلاس کنترل روی true تنظیم شده اند.

پراپرتی هایی که بجای ظاهر، رفتار کنترل را تنظیم می کنند، valueهای تم را نمی پذیرند. مثلاً، نمی توانید پراپرتی CommandName کنترل Button را با استفاده از تم تنظیم کنید. بطور مشابه، نمی توانید از تم برای تنظیم پراپرتی AllowPaging کنترل GridView یا پراپرتی DataSource استفاده کنید.

دقت کنید که نمی توانید از عبارت سازها، که عبارات کد را برای تخصیص در صفحه ای هنگام compile کردن، generate می کنند، در تم ها و اسکین ها استفاده کنید.

تم ها در مقابل cascading style sheetها

تم ها در اینکه مجموعه ای از اتریبیوت های رایج را که می توان به هر صفحه ای اعمال کرد تعریف می کنند، شبیه cascading style sheetها هستند. اما، تم ها در موارد زیر با cascading style sheetها فرق دارند:

  • تم ها می توانند پراپرتی های زیاد یک صفحه یا کنترل را تعریف کنند، نه فقط پراپرتی های استایل را. مثلاً، با استفاده از آنها می توانید برای کنترل TreeView، و template layout کنترل GridView، و غیره، گرافیک تعریف کنید.
  • تم ها می توانند حاوی گرافیک باشند.
  • تم ها مانند style sheetها، cascade نمی کنند.
  • بطورپیش فرض، هر valueی پراپرتی تعریف شده در تم که توسط پراپرتی Theme، reference شده است، valueهای پراپرتی را که بطور تعریفی روی کنترل تنظیم شده است، Override می کند، مگر اینکه شما خودتان تم را با استفاد ه از پراپرتی StyleSheetTheme مستقیماً اعمال کنید.
  • فقط یک تم را می توان به هر صفحه اعمال کرد. نمی توانید چندین تم را به یک صفحه اعمال کنید، بر عکس style sheetها که چندین style sheet را می توان اعمال کرد.

 

ملاحظات امنیتی
  • رفتار یک کنترل را طوری تغییر دهید که آنطور که انتظار می رود، رفتار نکند.
  • اسکریپت را در کامپیوتر client تزریق کنید، که منجر به ریسک cross-site scripting می شود.
  • اعتبار سنجی را تغییر دهید.
  • اطلاعات حساس را expose کنید.
  • راههای کاهش این خطرهای رایج عبارتند از:
  • دایرکتوری های جهانی و تم application را با تنظیمات مناسب کنترل access محافظت کنید. فقط باید به کاربرهای مورد اطمینان اجازه نوشتن فایل روی دایرکتوری تم را داد.
  • از تم هایی با منبع غیر قابل اطمینان استفاده کنید. همیشه قبل از استفاده از تم ها در وب سایت تان، تم های خارج از سازمانتان را برای پیدا کردن کدهای خطرناک آزمایش کنید.
  • نام تم را در داده های کوئری، expose نکنید. کاربرهای بدجنس می توانند از این اطلاعات برای استفاده از تم هایی که برای برنامه نویس ناشناس هستند استفاده کنند، و بدینوسیله اطلاعات حساس را expose می کنند.




نویسه جدید وبلاگ

آموزش ASP.NET

ساخت وب سایت با قابلیت آژاکس

این مقاله چگونگی ایجاد یک Web application با قابلیت AJAX را توضیح می دهد که که می تواند بعنوان یک لیست to-do یا لیست کارها کار کند. این مقاله به شما کمک می کند یک user interface پایه برای ایجاد، مدیریت، و حذف لیست ها و آیتم های موجود در آن لیست ها ایجاد کنید. تمامی عملیاتهای insert، update، delete، sort، و paging درون یک کنترل اجرا می شود که از Microsoft Ajax استفاده می کند.

می توانید از کنترل UpdatePanel برای فعال سازی postbackهای غیرهمزمان روی صفحه استفاده کنید. ASP.NET بطور پیش فرض، هنگام روی دادن یک postback، کل صفحه را refresh می کند. اما، هنگامی که از کنترل UpdatePanel برای ایجاد postbackهای غیر همزمان استفاده می کنید، فقط عنصرهایی که درون کنترل UpdatePanel هستند، تغییر می کنند. این کار باعث می شود صفحه دینامیک تر شود و سرعت بیشتری داشته باشد.

  • taskهای آورده شده در این مقاله شامل موارد زیر است:
  • ایجاد یک بانک اطلاعاتی SQL و اضافه کردن داده ها.
  • اضافه کردن یک کنترل LinqDataSource به صفحه.
  • اضافه کردن یک فایل LINQ to SQL Classes.
  • استفاده از کنترل LinqDataSource برای اتصال به بانک اطلاعاتی با استفاده از LINQ.
  • استفاده از کنترل UpdatePanel برای اضافه کردن قابلیت Ajax به صفحه.

پیش نیازها:

جهت تکمیل مقاله، به نرم افزارهای زیر احتیاج داریم:

  • Microsoft Visual Studio یا Visual Web Developer 2010 Express.
  • SQL Server Express نصب شده روی کامپیوتر.

 

ایجاد یک وب سایت

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

این مقاله از پروژه Web site استفاده می کند. در عوض می توانید از پروژه Web application استفاده می کند.

ایجاد یک file system Web site جدید

  • در Visual Web Developer، در منوی File، روی New Web Site کلیک کنید.
  • پنجره New Web Site نمایش داده می شود.

    زیر Visual Studio installed templates، روی ASP.NET Web Site کلیک کنید.

  • در باکس Location، روی File System کلیک کنید، و نام پوشه ای را که می خواهید صفحات وب سات را در آن نگه دارید، تایپ کنید.
  • در لیست Language، روی Visual Basic یا Visual C# کلیک کنید و سپس OK کنید.

image

Visual Web Developer، پوشه و صفحه ای جدید بنام Default.aspx ایجاد می کند.

 

ایجاد بانک اطلاعاتی جدید در SQL Server

حالا که وب سایتی را ایجاد کرده اید، مرحله بعدی ایجاد بانک اطلاعاتی و یک مرجع به آن در Server Explorer است. (در Visual Web Developer 2008 Express Edition، نام Server Explorer، Database Explorer است.) وقتی یک بانک اطلاعاتی به Server Explorer اضافه می کنید، می توانید از Visual Studio برای اضافه کردن جداول، رویه های ذخیره شده (stored procedure)، viewها، و غیره استفاده کنید. همچنین می توانید داده های جدول را مشاهده کنید یا queryهای خودتان را بطور دستی یا گرافیکی یا با استفاده از پنجره Query Builder، ایجاد کنید.

اضافه کردن بانک اطلاعاتی به پروژه

  • در Solution Explorer، روی نام وب سایت کلیک راست و روی Add New Item کلیک کنید.
  • پنجره Add New Item نمایش داده می شود.

    SQL Database را انتخاب کنید، و نام بانک اطلاعاتی را Tasks.mdf بگذارید، و سپس OK کنید.

  • وقتی Visual Studio  می پرسد آیا بانک اطلاعاتی باید در پوشه App_Data ذخیره شود، YES را کلیک کنید.

 

ایجاد یک Schema و Sample Data برای بانک اطلاعاتی

می توانید از database design و ویژگی های ویرایش برای ایجاد یک schema برای جدول جدید استفاده کنید که آیتم های task را ذخیره می کند.

  • در Solution Explorer، پوشه App_Data را باز منید و روی Tasks.mdf دابل کلیک کنید.
  • نمودار درختی بانک اطلاعاتی taskها در Server Explorer (یا Server Explorer) نمایش داده می شود.

    روی پوشه Tables کلیک راست و سپس روی Add New Table کلیک کنید.

  • در ویرایشگر جدول بانک اطلاعاتی، ستون های زیر را در جدول ایجاد کنید:

 image

  • روی ردیفی که حاوی taskid است، کلیک راست کنید و سپس روی Set Primary Keyکلیک کنید.
  • در حالیکه ردیف taskid هنوز در حالت انتخاب است، در تب Column Properties، بخش Identity Specification را باز کنید و سپس (Is Identity) را روی Yes تنظیم کنید.
  • جدول را ذخیره کنید و نام آنرا TasksList بگذارید.
  • در Server Explorer، روی جدول کلیک راست و روی Show Table Data، کلیک کنید.
  • پنجره ای نمایش داده می شود که می توانید داده ها را مشاهده و اضافه کنید.

    چهاریا پنج رکورد به جدول اضافه کنید، و سپس database designer را ببندید.

مجبور نیستید value برای taskid تعیین کنید، زیرا یک identity column است که value آن بطور اتوماتیک تخصیص داده می شود. باید False یا True بودن فیلد isComplete را مشخص کنید.

 

ایجاد کنترل های Data Access

در این بخش، از کنترل LinqDataSource استفاده می کنیم و کلاس هایی را ایجاد می کنیم که موجودیت های بانک اطلاعاتی (database entities) را نمایش می دهد. کنترل و کلاس ایجاد شده، لایه data-access هستند که در این مقاله مورد استفاده قرار می گیرند.

کنترل LinqDataSource، از طریق معماری کنترل ASP.NET data-source control، LINQ را expose می کند. کنترل LinqDataSource، کد select کردن، update کردن، delete کردن اشیاء بانک اطلاعاتی را ایجاد می کند. LINQ، اصول برنامه نویسی شی گرا را به داده های رابطه ای اعمال می کند. این کنترل مدل برنامه نویسی یکپارچه ای را برای query و update کردن داده ها از انواع مختلف منابع داده ها فراهم می کند و قابلیت های داده ها را مستقیماً به زبان های C# و Visual Basic، اکستند (extend) می کند.

mapping بانک اطلاعاتی Taskها به SQL Data Context Object

جهت شروع ایجاد لایه data access، باید یک typed dataset به پروژه اضافه کنید.

ایجاد کلاسی برای جدول TasksList

  • اگر وب سایت از قبل دارای پوشه App_Code نیست، در Solution Explorer، روی نام وب سایت کلیک راست، و روی Add ASP.NET Folder ، و سپس روی App_Code کلیک کنید.
  • روی پوشه App_Code راست کلیک و سپس روی Add New Item کلیک کنید.
  • زیر Visual Studio installed templates، گزینه LINQ to SQL Classes را انتخاب کنید، و فایل را به Tasks.dbml تغییر نام دهید، و سپس روی Add کلیک کنید.

پنجره Object Relational Designer نمایش داده می شود.

  • در Server Explorer، جدول TasksList را به پنجره Object Relational Designer درگ کنید.
  • فایل Tasks.dbml را ذخیره کنید.

وقتی فایل را ذخیره می کنید، Visual Studio  دو فایل در پوشه App_Code زیر Tasks.dbml ایجاد می کند. فایل اول، Tasks.dbml.layout است؛ و فایل دوم، بسته به زبانی که هنگام ایجاد فایل Tasks.dbml انتخاب کرده اید، Tasks.designer.cs یا Tasks.designer.vb است،.

  • در Solution Explorer، فایل Tasks.designer.cs یا Tasks.designer.vb را باز کنید.

دقت کنید که این کد حاوی کلاس هایی بنام TasksDataContext و TasksList است. کلاس TasksDataContext، نمایانگر بانک اطلاعاتی و کلاس TasksList، نمایانگر جدول بانک اطلاعاتی است. constructor بدون پارامتر کلاس TasksDataContext، کانکشن استرینگ را از فایل Web.config می خواند.

  • فایل Web.config را باز کنید.

دقت کنید که رشته اتصال به بانک اطلاعاتی Tasks.mdf، در عنصر connectionStrings اضافه شده است.

  • فایل کلاس، پنجره Object Relational Designer، و فایل Web.config را ببندید.

 

 

ایجاد و پیکر بندی کنترل LinqDataSource

حالا که یک جدول بانک اطلاعاتی و کلاس هایی دارید که نمایانگر موجودیت های بانک اطلاعاتی هستند، می توانید از کنترل LinqDataSource روی صفحه وب ASP.NET استفاده کنید تا به بانک اطلاعاتی دسترسی پیدا کنید.

  • صفحه Default.aspx را باز کنید.
  • به viewی Design، سوییچ کنید.
  • یک کنترل LinqDataSource روی صفحه درگ کنید.

می تو انید پراپرتی ID را بصورت LinqDataSource1، ترک کنید.

  • در پنل اسمارت تگ LinqDataSource Tasks، روی Configure Data Source کلیک کنید.

 

 image

  • در لیست Choose your context object، گزینه TasksDataContext انتخاب و سپس روی Next. کلیک کنید.
  • در لیست Table، گزینه TasksLists(Table<TasksList>) را انتخاب و سپس روی Finish کلیک کنید.
  • در منوی LinqDataSource Tasks، گزینه های Enable Delete، Enable Insert، و Enable Update را انتخاب کنید.

توجه داشته باشید که مجبور به تعیین هیچ database commands برای select کردن داده ها نیستید.

  • صفحه را ذخیره کنید.

 

 

استفاده از کنترل های Data Source

در این بخش، کنترل هایی را به صفحه ای که از فایل کلاس های LINQ to SQL استفاده می کند، اضافه می کنیم، که جدول بانک اطلاعاتی به کلاس ها را map می کند. همچنین می توانید از کنترل LinqDataSource برای ایجاد data application پایه استفاده کنید.

می توانید یک کنترل ListView جهت نمایش داده ها از بانک اطلاعاتی SQL server، اضافه کنید. سپس می توانید یک کنترل DropDownList برای فیلتر کردن داده های اضافه کنید که در کنترل ListView ظاهر می شوند. در ادامه مقاله، باید کنترل ها را در کنترل UpdatePanel قراردهید تا بتوانید قابلیت های postback غیر همزمان را اضافه کنید.

نمایش داده ها با کنترل ListView

کنترل ListView برای نمایش داده ها در هر ساختار تکرارشونده مفید است، مانند کنترل های DataList و Repeater. اما کنترل ListView، برعکس این کنترل ها، ، عملیات های edit، insert، و delete و همچنین sorting و paging را ساپورت می کند.

می توانید یک کنترل ListView اضافه کنید که همه taskها را نشان می دهد. بعداً، می توانید یک لیست drop-down اضافه کنید که به شما اجازه فیلتر کردن داده ها را می دهد. کنترل ListView، به نمایش داده ها شکل می دهد و دکمه هایی را نشان می دهد که می توانند برای ویرایش و آپدیت کردن محتوا، یا قراردادن (insert) محتویات جدید مورد استفاده قرار گیرند.

اضافه کردن کنترل ListView به صفحه

  • صفحه ای را که کنترل LinqDataSource را اضافه کرده اید، باز کنید.
  • در تب Data در Toolbar، کنترل ListView را روی صفحه درگ کنید.
  • در منوی ListView Tasks، در لیست Choose Data Source، گزینه LinqDataSource1 را انتخاب کنید.
  • این کار، ListView را به کنترل LinqDataSource، که قبلاً پیکربندی کرده اید، بایند (bind) می کند.

  • در پنل اسمارت تگ LinqDataSource Tasks، روی Configure ListView کلیک کنید.
  • در پنجره Configure ListView، گزینه های Enable Editing، Enable Inserting، Enable Deleting، و Enable Paging را انتخاب کنید.
  • روی OK کلیک کنید.
  • صفحه را ذخیره کنید.

 

اضافه کردن کنترل DropDownList جهت فیلتر کردن داده ها

می توانید داده هایی را که در کنترل ListView، از طریق ایجاد یک لیست drop-down نمایش داده می شود، فیلتر کنید - که به شما اجازه می دهد taskهایی را که قرار است نشان دهید، انتخاب کنید. مثلاً می توانید لیستی ایجاد کنید که یا taskهای فعال یا taskهایی را که تکمیل شده اند، نشان می دهد.

می توانید کد را در کنترل ListView قراردهید تا بطور اتوماتیک یک عبارت Where، بمنظور نمایش رکوردهایی که با selection کنترل DropDownList مچ هستند، ایجاد شود.

اضافه کردن یک کنترل جهت فیلتر کردن داده ها

  • صفحه Default.aspx را باز کنید، و به ویووی Source سوییچ کنید.
  • درون عنصر فرم و بالای کنترل ListView، مارک آپ های زیر را دنبال کنید:

 

  • <span id="filter">
    Current List Filter:
    <asp:DropDownList ID="DropDownList1"
    AutoPostBack="true"
    runat="server">
    <asp:ListItem Text="Active" Value="False" />
    <asp:ListItem Text="Completed" Value="True" />
    </asp:DropDownList>
    </span>
    <hr id="separator" />

  • در کنترل LinqDataSource، پراپرتی AutoGenerateWhereClause را روی true تنظیم کنید، همانگونه که در مثلازیر نشان داده شده:
    <asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="TasksDataContext"
    TableName="TasksLists"
    EnableDelete="True"
    EnableInsert="True"
    EnableUpdate="True"
    AutoGenerateWhereClause="true" >

  • مارک آپ زیر را به پارامترهای Where، بین تگ های opening و closing کنترل LinqDataSource اضافه کنید.
    <WhereParameters>
    <asp:ControlParameter
    Name="isComplete"
    ControlID="DropDownList1"
    Type="Boolean" />
    </WhereParameters>

  • صفحه را ذخیره کنید.

 

 

حالا می توانید صفحه را تست کنید تا مطمئن شوید داده هایی را که انتخاب کرده اید، نمایش می دهد.

تست کردن صفحه

  • CTRL و F5 را جهت نمایش صفحه در مرورگر فشار دهید.
  • Completed را از لیست drop-down انتخاب کنید.

شما فقط آن taskها را خواهید دید که بصورت complete مارک خورده اند.

 

اضافه کردن قابلیت AJAX به صفحه

در این بخش، جهت فعال کردن ویژگی هایAJAX ، یک کنترل به صفحه اضافه می کنیم. سپس یک کنترل UpdatePanel به صفحه اضافه می کنیم، که اجازه اجرای taskها را در کنترل ListView، بدون postback کامل صفحه، می دهد.

اضافه کردن کنترل ScriptManager

برای استفاده از هر ویژگی ASP.NET AJAX از قبیل کنترل UpdatePanel، باید یک کنترل ScriptManager به صفحه اضافه کنید.

  • 1. صفحه Default.aspx را باز کنید، و به ویووی Source سوییچ کنید.
  • 2. در تب AJAX Extensions در toolbox، روی کنترل ScriptManager راست کنید تا آن را به صفحه درون عنصر فرم اضافه کنید.

قراردادن کنترل ListView درون کنترل UpdatePanel

  • در صفحه Default.aspx، مارک آپ زیر را بلافاصله بعدا از باز کردن تگ <form>اضافه کنید:
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
  • کد زیر را دقیقاً قبل از بستن تگ </form> اضافه کنید:
    </ContentTemplate>
    </asp:UpdatePanel>

این کد، یک کنترل UpdatePanel، اطراف کنترل ListView و کنترل DropDownList قرار می دهد.

  • صفحه را ذخیره کنید.

حالا می توانید دوباره صفحه را تست کنید.

 

تست کردن صفحه

  • CTRL و F5 را جهت نمایش صفحه در مرورگر فشار دهید.

توجه داشته باشید که وقتی Active یا Completed را از list filter انتخاب می کنید، postback کامل اتفاق نمی افتد و کنترل ListView، لیست آپدیت شده ای از داده ها، بدون flicker، را نمایش می دهد.

 

خلاصه

این مقاله چگونگی اضافه کردن ListView به صفحه را با کنترل LinqDataSource، جهت اضافه کردن (add)، اصلاح (modify)، و حذف taskها از بانک اطلاعاتی به شما نشان داد. سپس یاد گرقتید چگونه قابلیت AJAX را با استفاده از کنترل UpdatePanel، اضافه کنید.







گزارش تخلف
بعدی