بایگانی برچسب: آموزش طراحی سایت با asp net

مدیریت حالت در ASP.NET – آموزش گام به گام طراحی سایت با ASP NET

ASP.NET State Managemet

آموزش گام به گام طراحی سایت با ASP NET : هر بار که یک صفحه وب به سمت سرور ارسال می شود یک نمونه از کلاس آن صفحه ساخته می شود. در برنامه نویسی وب سنتی این کار به این معنی بود که تمام اطلاعات مربوط به آن صفحه و کنترل های بر روی آن در یک رفت و برگشت به سرور (round trip) از بین خواهد رفت. به عنوان مثال اگر کاربر اطلاعاتی را در یک textbox وارد کند، آن اطلاعات در یک رفت و برگشت از طرف مرورگر یا مشتری (client) به سمت سرور از دست خواهد رفت. در متن زیر به بررسی مدیریت حالت در ASP.NET برای رفع این مشکل خواهیم پرداخت.

آموزش گام به گام طراحی سایت با asp net

برای جلوگیری از این محدودیت که در برنامه نویسی وب سنتی وجود داشت، ASP.NET راه کارهای مختلفی را ارائه می دهد که باعث محافظت از داده می شود. این ویژگی ها عبارتند از:

  • View State
  • Control State
  • Hidden Fields
  • Cookies
  • Query Strings
  • Application State
  • Session State
  • Profile properties

در view state، control state، hidden fields،cookies و query strings  داده در سمت client به شیوه های مختلف ذخیره می شود، در حالیکه در application state، session state و profile properties داده در حافظه های موجود در سرور ذخیره می شود. هر کدام از دو روش نقاط قوت و ضعف خاص خود را دارند.

آموزش گام به گام طراحی سایت با ASP NET :

روش های مدیریتی مبتنی بر مشتری:(Client-based)

بخش های بعد در مورد راهکارهای مدیریت حالت که در آن اطلاعات داخل page در کامپیوتر client ذخیره می شود توضیح می دهد. هیچ اطلاعاتی در بین round trip ها در سرور ذخیره نمی شود.

view state

view state یک دیکشنری از اشیا برای نگه داری از داده های مهم هر page فراهم می کند. این روش، روش پیش فرض است که هر page برای نگه داری اطلاعات و ویژگی های کنترلی خود مابین رفت و برگشت ها استفاده می کند.

وقتی یک page پردازش می شود حالت فعلی page و کنترل های آن با یک رشته hash می شود و اگر میزان اندازه داده در view state بیش تر از مقدار معین شده که در ویژگی  MaxPageStateFieldLength قرار دارد باشد، به صورت یک فیلد پنهان در داخل page ذخیره می شود. وقتی که page دوباره به سمت سرور ارسال می شود رشته view state را هنگام بارگذاری، تجزیه (parse) می کند و اطلاعات در داخل آن باقی می ماند.

Control state  

گاهی اوقات نیاز دارید برای درست کار کردن کنترل ها، داده های مربوط به حالت کنترل (control state) را ذخیره کنید. به عنوان مثال اگر کنترلی بنویسید که شامل tabهای مختلفی باشد و هر  tab اطلاعات مختلفی را نشان می دهد، برای اینکه کنترل ها به درستی کار کنند هر کنترل باید بداند که کدام tab در هر round trip انتخاب می شود. view state  می تواند برای این منظور انتخاب شود اما می تواند توسط توسعه دهندگان در سطح page غیرفعال شود و منجر به عدم کنترل گردد. برای حل این مشکل فریم ورک ASP.NET ویژگی به نام control state را معرفی کرد که موجب می شود اطلاعاتی که منحصرا مربوط به کنترل هستند نگه داری شوند و نتوان مانند view state آن را غیرفعال کرد.

Hidden Fields

ASP.NET به شما اجازه می دهد تا اطلاعات را در داخل Hidden Fields یا فیلدهای پنهان ذخیره کنید. یک فیلد پنهان به طور آشکار در صفحه مرورگر render نمی شود اما می توانید ویژگی های آن را به صورت دلخواه مانند کنترل استاندارد تنظیم کنید. وقتیکه یک page در سرور ثبت می شود محتوای فیلد پنهان آن در یک فرم HTTP همراه با سایر کنترل ها ارسال می شود. فیلد پنهان مانند یک مخزن (repository) برای هر اطلاعاتی که ذخیره می کنید عمل می کند.

یادداشت امنیتی در آموزش گام به گام طراحی سایت با ASP NET :

 

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

کنترل Hidden Fields یک متغیر را در ویژگی به نام value ذخیره می کند و باید به طور صریح به page اضافه شود. برای اینکه مقادیر فیلد پنهان هنگام پردازش page قابل دسترس باشند باید با فرمان HTTP POST  آن page را ثبت کنید. اگر از فیلدهای پنهان استفاده می کنید و page با فرمان HTTP GET ثبت شده است، فیلدهای پنهان در دسترس نخواهند بود

آموزش گام به گام طراحی سایت با ASP NET :

Cookies

Cookie حجم کمی از داده است که به صورت که به صورت یک فایل متنی در سیستم فایل client یا در مرورگر client ذخیره می شود. Cookie شامل اطلاعات مختص به سایت است که سرور آنها را همراه خروجی های page به سمت client ارسال می کند.cookie  ها می توانند موقت(با تاریخ و زمان انقضای معین) یا دائمی باشند.

شما می توانید از cookie برای ذخیره اطلاعات درباره ی یک client ، session یا application استفاده کنید. cookie ها در دستگاه client ذخیره می شوند و زمانی که مرور گر یک page را درخواست می دهد client اطلاعات داخل cookie را همراه اطلاعات در خواستی می فرستد. سرور می تواند cookie را بخواند و مقادیر آن را استخراج کند.
یک استفاده رایج می تواند ذخیره یک token باشد که نشان می دهد کاربر قبلا در برنامه احراز هویت شده است.

یادداشت امنیتی
مرورگر فقط می تواند داده ای را به سرور ارسال کند که سازنده cookie است. کاربران دشمن می توانند راه هایی برای دسترسی به cookie ها و خواندن محتوای آنها پیدا کنند.توصیه می شود که اطلاعات مهم مثل نام کاربری یا پسورد را در cookies ذخیره نکنید. جای آن token را در cookie ذخیره کنید که کاربر را شناسایی می کند و از token برای پیدا کردن اطلاعات مهم درسرور استفاده می کند.

Query Strings
رشته Query اطلاعاتی است که به انتهای page URL اضافه می شود.یک رشته query می توانند مانند مثال زیر باشد
http://www.contoso.com/listwidgets.aspx?category=basic & price=100
در مسیر URL بالا رشته query با علامت سوال شروع می شود و شامل ۲ جفت به صورت attribute/value است.که یکی از انها “category” و دیگری “price” نام دارد. رشته query یک راه ساده اما محدود را برای ذخیره اطلاعات فراهم می کند. به عنوان مثال راه ساده ای برای ارسال اطلاعات از یک page به page دیگر وجود دارد مانند ارسال یک شماره محصول (product number) از یک page به page دیگری که از آنجا پردازش خواهد شد.با این حال بعضی از مرورگر ها و سیستم های client یک محدوده ۲۰۸۳ کاراکتری برای طول URL در نظر می گیرند.

یادداشت امنیتی
اطلاعاتی که در رشته query ارسال می شوند می توانند توسط کاربران دشمن تحریف و دچار تغییر شوند. به رشته های query برای ارسال اطلاعات مهم و حساس اطمینان نکنید.همچنین کاربر می تواند یک URL را bookmark کند یا URL را برای کاربران دیگر ارسال کند.
برای اینکه مقدار رشته query در هنگام پردازش page در دسترس باشد page را باید با فرمان HTTP GET ثبت (submit) کنید. به همین علت زمانی که از فرمان HTTP POST برای پردازش page استفاده می کنید نمی توانید از فواید رشته query بهره ببرید.

روش های مدیریتی مبتنی بر سرور(server-based)
ASP.NET روش های متنوعی را برای نگه داری و ذخیره اطلاعات بر روی سرور به جای ذخیره آن ها بر روی سیستم client ارائه می دهد.با استفاده از روش های مدیریتی مبتنی بر سرور می توانید حجم اطلاعات ارسال شده به client را کاهش دهید اگرچه این کار نیازمند استفاده از منابع پر هزینه بر روی سرور است. بخش های بعدی ۳ روش مدیریتی مبتنی بر سرور را شرح می دهند:Application state و session state و profile properties.

Application State
ASP.NET به شما اجازه می دهد که مقادیر را با استفاده از application state که یک نمونه از کلاس HTTP Application State است برای هر برنامه وب فعال ذخیره کنید.application state یک مکانیزم عمومی ذخیره سازی است که توسط تمام pageها در برنامه وب قابل دسترسی است.بنابراین application state برای ذخیره سازی اطلاعاتی که بین رفت و برگشت های (round trip) سرور و مابین در خواست ها برای هر page باید نگه داری و ذخیره شوند مفید خواهد بود.
Application state در یک دیکشنری مقدار/کلید (key/value)_که زمان هر درخواست به URL ساخته می شود_ذخیره می گردد.شما می توانید اطلاعات مربوط به application خود را برای ذخیره شدن مابین هر درخواست به page به این ساختار اضافه کنید.
زمانی که شما اطلاعات مربوط به application خود را به application state اضافه می کنید سرور آنها را مدیریت می کند.

Session State
ASP.NET به شما اجازه می دهد که مقادیر را با استفاده از Session state که یک نمونه از کلاس Http Session state است برای هر برنامه فعال وب ذخیره کنید.
Session state مشابه application است به استثنا این که Session state به Session فعلی مرورگر محدود می شود. یعنی محدوده فعالیت آن، Session فعلی مرورگر است. وقتی کاربران مختلف از برنامه شما استفاده می کنند هر Session کاربر یک Session state متفاوت خواهد داشت. همچنین وقتی یک کاربر از برنامه شما خارج می شود و بعد دوباره به آن برمی گردد Session کاربر دومی Session state متفاوتی نسبت به اولی خواهد داشت.
Session state به صورت یک دیکشنری مقدار/کلید(key/value) برای ذخیره اطلاعات مربوط به Session_که باید مابین رفت و برگشت ها به سرور و مابین درخواست به page نگه داری شوند_ساخته می شود.
می توانید از Session state برای انجام کار های زیر استفاده کرد:
• برای شناسایی درخواست های مرورگر یا client به صورت انحصاری و نگاشت ان ها به نمونه های Session تنها و تکی بر روی سرور

• ذخیره داده مربوط به Session بر روی سرور برای استفاده از آن هنگام درخواست های چند گانه مرورگر یا client در session یکسان
• جهت افزایش رویداد های مدیریت session
وقتی اطلاعات مربوط به application را به session state اضافه می کنید سرور این شی را مدیریت می کند.بسته به اینکه کدام گزینه را در نظر می گیرید اطلاعات session بر روی cookie ها، بر روی server یا بر روی کامپیوتری که Microsoft SQL Server را اجرا می کند ذخیره شوند.

Profile properties
ASP.NET ویژگی به نام profile properties را فراهم می کند که اجازه ذخیره سازی داده های مربوط به کاربر را می دهد.این ویژگی مشابه session state است به جز اینکه داده ی profile زمانی که session کاربر به اتمام می رسد از بین نمی رود. ویژگی profile properties از یک پروفایل ASP.NET استفاده می کند و به صورت پایدار ذخیره می شود.پروفایل ASP.NET به شما اجازه می دهد تا به راحتی اطلاعات خود را مدیریت کنید بدون اینکه برای خود یک پایگاه داده (data base) بسازید و آن را ذخیره کنید.همچنین پروفایل با استفاده از یک API قوی که می توان از هر جای برنامه به آن دسترسی پیدا کرد اطلاعات کاربر را در دسترس قرار می دهد.
شما می توانید اشیا از هر نوع را در پروفایل ذخیره کنید.ویژگی پروفایل ASP.NET یک سیستم ذخیره سازی عمومی و کلی را فراهم می کند که به شما اجازه می دهد هر نوع داده را تعریف و ذخیره کنید.
برای استفاده از profile properties باید یک سرویس دهنده profile را پیکربندی کنید.ASP.NET شامل کلاس Sql profile provider است که به شما اجازه می دهد داده پروفایل را در یک پایگاه داده SQL ذخیره کنید.همچنین می توانید کلاس سرویس دهنده پروفایل خود را نیز بسازید که داده پروفایل را در یک فرمت دلخواه تغییر داده شده (custom) و در یک مکانیزم ذخیره سازی دلخواه مثل فایل XML یا یک وب سرویس(web service) ذخیره می کند.
چون داده ای که در profile properties قرار دارد در داخل حافظه برنامه (application memory) ذخیره شده است از طریق ریستارت کردن ( Internet Information Service (IIS حفظ و نگه داری می شود. ( آموزش گام به گام طراحی سایت با asp net )

بازیابی و نمایش داده با استفاده از Model Binding و Web Form ها

در این  آموزش ASP پروژه محور به نحوه  استفاده از  model binding  در یک پروژه ASP.NET Form پرداخته می شود.

model binding باعث می شود تجزیه و تحلیل و تعامل با داده نسبت به اشیای داده ی منیع (Object Data source  یا Sql Data Source ) ساده تر باشد. در این آموزش مطالب مقدماتی گفته می شود و مطالب پیچیده تر در آموزش های بعدی می آید.

ساختارها و الگوهای model binding با همه تکنولوژی های دسترسی به داده کار می کند. در این آموزش شما از Entity FrameWorkاستفاده می کنید ولی می توانید از هر تکنولوژی دیگری که با آن آشنایی دارید نیز استفاده کنید. از طریق یک سرور کنترل داده  (data-bound) مثل Grid view، List view، Details view  و Form view می توانید روش هایی که برای انتخاب، آپدیت، پاک کردن یا ایجاد کردن داده استفاده کرده اید را تعیین کنید. در این آموزش یک مقدار برای SelectMethod تعیین می کنید. با استفاده از این متد شما منطقی را برای دریافت داده فراهم می کنید. در آموزش بعدی UpdateMethod، DeleteMethod  و InsertMethod  را تنظیم خواهید کرد.

می توانید پروژه کامل را به زبان #C یا VB دانلود کنید. کدهای دانلود شده با visual studio 2012 و visual studio 2013  کار می کنند. در این آموزش از قالب های visual studio 2012  استفاده شده است که اندکی با قالب های نسخه ۲۰۱۳ متفاوت است.

در این آموزش برنامه را روی visual studio اجرا می کنید. همچنین می توانید آن را با استفاده از سرویس دهنده های hosting روی اینترنت قرار دهید. Microsoft از طریق اکانت trial مجانی Azure امکان استفاده ازhosting برای  ۱۰ وبسایت را در اختیار می گذارد.

چیزی که می سازید

در این آموزش آموزش ASP پروژه محور شما

  • اشیاءی را می سازید که یک دانشگاه همراه با دانشجوبان ثیت نام شده در دروس مختلف را نشان می دهد
  • جداول پایگاه داده را از اشیاء را می سازید
  • پایگاه داده را با داده های تست راه اندازی می کنید
  • داده را در Web Formها نمایش می دهید

ایجاد پروژه

در visual studio 2013  یک ASP.NET Web Application جدید به نام ContosoUniversityModelBinding  ایجاد کنید.

آموزش asp پروژه محور

قالب Web Form را انتخاب کنید و بقیه گزینه ها را به حالت پیش فرض قرار دهید. بر روی OK کلیک کنید تا پروژه راه اندازی شود.

آموزش asp nt

در ابتدا چند تغییر کوچک برای سفارشی کردن (Customize) ظاهر سایت انجام دهید. فایل Site1.Master  را باز کنید و عنوان را به ContosoUniversity به جای My ASP.NET Application تغییر دهید.

<title><%: Page.Title %> - Contoso University</title>

سپس header را از  Application name به ContosoUniversity تغییر دهید.

<div class="navbar-header">
    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
    </button>
    <a class="navbar-brand" runat="server" href="~/">Contoso University</a>
</div>

همچنین در Site.Master لینک های navigation  را که در header قرار دارند تغییر دهید تا صفحاتی را که مربوط به این سایت هستند نمایش  دهد. شما نیازی به صفحه About یا Contact ندارید بنابراین این لینک ها می توانند حذف شوند در عوض لینک به صفحه ای به نام Student نیاز دارید. این صفحه هنوز ساخته نشده است.

<ul class="nav navbar-nav">
    <li><a runat="server" href="~/">Home</a></li>
    <li><a runat="server" href="~/Students">Students</a></li>
</ul>

Site.Master را ذخیره کنید و ببندید.

اکنون Web Form ای برای نمایش داده های دانشجو خواهید ساخت. روی پروژه تان راست کلیک کنید و گزینه Add و New Item را انتخاب کنید. قالب Web Form With Master Page را انتخاب کنید و نام آن را Student.aspx قرار دهید. Site.Master  را به عنوان  master page برای Web Form جدید انتخاب کنید.

ساخت مدل های داده و پایگاه داده

شما از Code First Migration برای اشیا و جدول های پایگاه داده متناظر با آن استفاده خواهید کرد. این جدول ها اطلاعاتی را درباره دانشجویان و درس های آنها ذخیره می کند. در پوشه Models کلاسی به نام UniversityModels.cs اضافه  کنید.

asp مقدماتی

در ابن فایل کلاس های Courses، Enrollment، Student ، SchoolContext را به صورت زیر تعریف کنید.

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;

namespace ContosoUniversityModelBinding.Models
{
    public class SchoolContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Course> Courses { get; set; }
    }

    public class Student
    {
        [Key, Display(Name = "ID")]
        [ScaffoldColumn(false)]
        public int StudentID { get; set; }

        [Required, StringLength(40), Display(Name="Last Name")]
        public string LastName { get; set; }

        [Required, StringLength(20), Display(Name = "First Name")]
        public string FirstName { get; set; }

        [EnumDataType(typeof(AcademicYear)), Display(Name = "Academic Year")]
        public AcademicYear Year { get; set; }

        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }

    public class Enrollment
    {
        [Key]
        public int EnrollmentID { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
        public decimal? Grade { get; set; }
        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }

    public class Course
    {
        [Key]
        public int CourseID { get; set; }
        public string Title { get; set; }
        public int Credits { get; set; }
        public virtual ICollection<Enrollment> Enrollments { get; set; }
    } 

    public enum AcademicYear
    {
        Freshman,
        Sophomore,
        Junior,
        Senior
    }
}

کلاس SchoolContext  از کلاس DbContext که ارتباط با پایگاه داده و تغییرات در داده را مدیریت می کند مشتق شده است.

در کلاس Student به attributeهایی که به FirstName ، LastName و Year اختصاص داده شده اند دقت کنید. این attribute ها برای اعتبارسنجی داده(data validation) استفاده خواهند شد. برای ساده سازی کد در این پروژه فقط همین attributeها برای اعتبارسنجی داده انتخاب شده اند. در یک پروژه واقعی باید برای تمام propertyهایی که اعتبار سنجی داده لازم دارند، attribute اعتبارسنجی اختصاص دهید.

فایل UniversityModels.cs را ذخیره کنید.

شما می توانید از ابزار (tools) برای Code First Migration جهت راه اندازی پایگاه داده مبتنی بر این کلاس ها استفاده کنید. در داخل کنسول Package Manager Console فرمان زیر را اجرا کنید.

enable-migrations -ContextTypeName ContosoUniversityModelBinding.Models.SchoolContext

اگر فرمان مورد نظر با موفقیت کامل شد پیغامی را دریافت می کنید مبتنی بر اینکه migration فعال شده است.

توجه داشته باشید که فایل جدیدی به نام Configuration.cs ساخته شده است. در Visual Studio ابن فایل به طور خودکار پس از ساخته شدن باز می شود. کلاس Configuration حاوی متدی به نام Seed است که به شما اجازه می دهد تا جدول های پایگاه داده را با داده تست پرکنید کنید.

کد زیر را به متد Seed اضافه کنید. بابد از کلمه using برای فضای نام ContosoUniversityModelBinding.Models استفاده کنید

namespace ContosoUniversityModelBinding.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;
    using ContosoUniversityModelBinding.Models;

    internal sealed class Configuration : DbMigrationsConfiguration<SchoolContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(SchoolContext context)
        {

            context.Students.AddOrUpdate(
                 new Student { 
                     FirstName = "Carson", 
                     LastName = "Alexander", 
                     Year = AcademicYear.Freshman },
                 new Student { 
                     FirstName = "Meredith", 
                     LastName = "Alonso", 
                     Year = AcademicYear.Freshman },
                 new Student { 
                     FirstName = "Arturo", 
                     LastName = "Anand", 
                     Year = AcademicYear.Sophomore },
                 new Student { 
                     FirstName = "Gytis", 
                     LastName = "Barzdukas", 
                     Year = AcademicYear.Sophomore },
                 new Student { 
                     FirstName = "Yan", 
                     LastName = "Li", 
                     Year = AcademicYear.Junior },
                 new Student { 
                     FirstName = "Peggy", 
                     LastName = "Justice", 
                     Year = AcademicYear.Junior },
                 new Student { 
                     FirstName = "Laura", 
                     LastName = "Norman", 
                     Year = AcademicYear.Senior },
                 new Student { 
                     FirstName = "Nino", 
                     LastName = "Olivetto", 
                     Year = AcademicYear.Senior }
                 );

            context.SaveChanges();

            context.Courses.AddOrUpdate(
                new Course { Title = "Chemistry", Credits = 3 },
                new Course { Title = "Microeconomics", Credits = 3 },
                new Course { Title = "Macroeconomics", Credits = 3 },
                new Course { Title = "Calculus", Credits = 4 },
                new Course { Title = "Trigonometry", Credits = 4 },
                new Course { Title = "Composition", Credits = 3 },
                new Course { Title = "Literature", Credits = 4 }
                );

            context.SaveChanges();

            context.Enrollments.AddOrUpdate(
                new Enrollment { StudentID = 1, CourseID = 1, Grade = 1 },
                new Enrollment { StudentID = 1, CourseID = 2, Grade = 3 },
                new Enrollment { StudentID = 1, CourseID = 3, Grade = 1 },
                new Enrollment { StudentID = 2, CourseID = 4, Grade = 2 },
                new Enrollment { StudentID = 2, CourseID = 5, Grade = 4 },
                new Enrollment { StudentID = 2, CourseID = 6, Grade = 4 },
                new Enrollment { StudentID = 3, CourseID = 1 },
                new Enrollment { StudentID = 4, CourseID = 1 },
                new Enrollment { StudentID = 4, CourseID = 2, Grade = 4 },
                new Enrollment { StudentID = 5, CourseID = 3, Grade = 3 },
                new Enrollment { StudentID = 6, CourseID = 4 },
                new Enrollment { StudentID = 7, CourseID = 5, Grade = 2 }
                );

            context.SaveChanges();
        }
    }
}

Configuration.cs را ذخیره کنبد.

در داخل Package Manager Console دستور add-migration initial را اجرا کنید. سپس دستور update database را اجرا کنید. اگر هنگام اجرای این دستور با استثنا مواجه شدید امکان دارد مقادیر StudentID و CourseID با مقادیری که در داخل متد Seed وجود دارد متفاوت باشند. جدول ها در پایگاه داده را باز کنید و مقادیر موجود در StudentID و CourseID را پیدا کنید. آن مقادبر را برای Seed کردن جداول Enrollment به کد اضافه کنید.

فایل data base اضافه شده است اما فعلا در داخل پروژه پنهان است. بر روی Show All Files کلیک کنید تا فایل را نمایش دهد.

آموزش asp.net پروژه محور

توجه داشته باشید که فایل mdf. اکنون در پوشه App-Data قرار دارد. بر روی mdf. دابل کلیک کنید و Server Explorer را باز کنید. حالا جدول ها موجوداند و در داخل آنها داده وجود دارد.

آموزش asp.net

نمایش داده از Students و جدول های مرتبط

با وجود داده در پایگاه داده حالا می توانید داده را بازیابی(retrieve) کنید و آن را در صفحه وب نمایش دهید. از کنترل Grid view برای نمایش داده به صورت سطری و ستونی استفاده کنید.

فایل Students.aspx را باز کنید و placeholderای به نام MainContent را پیدا کنید. در این placeholder  یک کنترل Grid view که شامل کد زیر است اضافه کنید.

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <asp:GridView runat="server" ID="studentsGrid"
        ItemType="ContosoUniversityModelBinding.Models.Student" DataKeyNames="StudentID" 
        SelectMethod="studentsGrid_GetData"
        AutoGenerateColumns="false">
        <Columns>
            <asp:DynamicField DataField="StudentID" />
            <asp:DynamicField DataField="LastName" />
            <asp:DynamicField DataField="FirstName" />
            <asp:DynamicField DataField="Year" />          
            <asp:TemplateField HeaderText="Total Credits">
              <ItemTemplate>
                <asp:Label Text="<%# Item.Enrollments.Sum(en => en.Course.Credits) %>" 
                    runat="server" />
              </ItemTemplate>
            </asp:TemplateField>        
        </Columns>
    </asp:GridView>
</asp:Content>

در این قطعه کد چند نکته وجود دارد که باید به آنها توجه کرد. اول توجه کنید که مقداری برای SelectMethod در Gridview ، تنظیم  شده است. این مقدار نام متدی را که جهت بازیابی داده برای Gridview استفاده می شود معین می کند. این متد را در مرحله بعد خواهید ساخت. دوم اینکه ویژگی(property)  به نام ItemType برای کلاس Students که قبلا ساخته اید set شده است. با set کردن این مقدار می توانید به propertyهای آن کلاس در کد مراجعه کنید. به عنوان مثال کلاس Students حاوی یک collection به نام Enrollmentsاست. می توانید از Item.Enrollments برای بازیابی آن collection استفاده کنید.

در فایل code-behind باید متدی که برای مقدار SelectMethod معین شده است اضافه کنید. Student.aspx.cs را باز کنید و عبارت using را برای فضاهای نام ContosoUniversityModelBinding.Models و System.Data.Entity اضافه کنید.

using ContosoUniversityModelBinding.Models;
using System.Data.Entity;

سپس متد زیر را اضافه کنید. توجه داشته باشید که نام این متد با نامی که برای SelectMethod گذاشته اید مطابقت داشته باشد.

()public IQueryable<Student> studentsGrid_GetData
}
    SchoolContext db = new SchoolContext();
    var query = db.Students.Include(s => s.Enrollments.Select(e => e.Course));
    return query;
{

عبارت include موجب بهبود کارایی این query می شود اما برای اینکه این query به درستی کار کند ضرورری نیست. بدون query داده از طریق بار کردن کند(lazy loading ) بازیاتی می شود که در آن هر بار که داده بازیابی می شود یک query جدا به پایگاه داده فرستاده می شود. با استفاده از عبارت include داده از طریق بارکردن سریع(eager loading) بازیابی می شود که تمام داده از طریق یک query از پایگاه داده بازیابی می شود. در حالتی بخش بیشتری از داده مورد استفاده قرار نمی گیرد eager loading کارایی پایینی خواهد داشت.

به طور پیش فرض داده با استفاده از مقادیر property که به عنوان کلید(key) در نظر گرفته شده است مرتب می شود. می توانید برای تعیین کردن مقدار متفاوت برای مرتب کردن از عبارت OrderBy استفاده کنید.در این مثال از propertyای به نام StudentID برای مرتب سازی استفاده می شود. در مباحث مربوط به مرتب سازی(sorting)، صفحه بندی(paging) و فیلتر کردن (filtering) می توانبد به کاربر این قابلیت را بدهید که ستون مورد نظر خود را برای مرتب سازی انتخاب کند.

Web Application خود را اجرا کنید و بر روی Students قرار بگیرید. صفحه Students اطلاعات دانشجو را به صورت زیر نشان می دهد.

کلاس asp.net پروژه محور

تولید خودکار متدهای model binding

هنگام کار با این آموزش می توانید کدهای این آموزش را در پروژه خود کپی کنید، البته یکی از معایب این روش این است که از ویژگی هایی که visual studio به صورت خودکار جهت تولید کد برای model binding پیاده سازی می کند آگاه نخواهید شد. وقتی روی پروژه خودتان کار می کنید، تولیدکد به طور خودکار باعث صرفه جویی در زمان می شود و به شما این حس را می دهد که چگونه یک عملیات (operation) را پباده سازی کنید. این بخش، تولید کد به صورت خودکار(automatic) را توضیح می دهد.

وقتی که بر روی propertyهای DeleteMethod،InsertMethod، UpdateMethod یا SelectMethod یک مقدار را set می کنید، می توانید گزینه Create New Method را انتخاب کنید.

دوره asp.net پروژه محور

visual studio علاوه براینکه متدی را در  کدهای پشت صحنه می سازد، یک کد پیاده سازی برای کمک به کاربر برای اجرای عملیات تولید می کند. اگر شما ItemType (که یک property است) را قبل از استفاده از تولید کد خودکار تنظیم  کنید، کد تولید شده، از آن property برای عملیات استفاده می کند. به عنوان مثال وقتی که  UpdateMethod تنظیم شود کد زیر تولید می شود.

// The id parameter name should match the DataKeyNames value set on the control
public void studentsGrid_UpdateItem(int id)
{
    ContosoUniversityModelBinding.Models.Student item = null;
    // Load the item here, e.g. item = MyDataLayer.Find(id);
    if (item == null)
    {
        // The item wasn't found
        ModelState.AddModelError("", String.Format("Item with id {0} was not found", id));
        return;
    }
    TryUpdateModel(item);
    if (ModelState.IsValid)
    {
        // Save changes here, e.g. MyDataLayer.SaveChanges();

    }
}

نیازی نیست که کد بالا به پروژه شما اضافه شود.

نتیجه آموزش asp پروژه محور

در این آموزش کلاس هایی تولید کردید و از آنها یک پایگاه داده ساختید. جدول های پایگاه داده را با داده تست پر کردید. از model binding برای بازیابی داده از data base استفاده کردید و سپس داده را در یک Gridview  نمایش دادید.

بررسی فرآیند درخواست صفحه به وسیله مرورگر در تکنولوژی ASP.NET

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

بررسی درخواست صفحه به وسیله مرورگر در ASP.NETدانلود فایل صوتی

ایجاد فایل لاگ ساده در ASP.NET با استفاده از C# و VB.Net

در این آموزش ASP.Net با C# نحوه ایجاد یک  لاگ فایل متنی ساده  در ASP.NET با استفاده از #C و VB.Net آموزش داده می شود.

ثبت خطاها  ( exception ها) که در برنامه ASP.Net  رخ می دهد در یک فایل متنی روند عیب یابی برنامه را راحت تر کرده و شما با باز کردن یک فایل تکست می توانید به راحتی به ایراد برنامه پی ببرید.

آموزش ASP.Net با C#

تگ های HTML

تگ HTML زیر که یک کنترل Button  است   یک استثناء تولید می کند.

 

<asp:Button Text="Click to Raise Exception" runat="server" OnClick="RaiseException"/>

فضا های نام

شما باید فضای نام زیر را اضافه کنید.

#C

using System.IO;

VB.Net

Imports System.IO

ایجاد فایل لاگ ساده متنی در آموزش ASP.Net با C#

رویداد زیر زمانی رخ می دهد که برروی Button کلیک شود و یک استثناء در تبدیل رشته به عدد صحیح در درون بلوک Try-Catch  رخ خواهد داد.

استثناء تولید شده به وسیله  بلوک Catch گرفته شده و تابع LogError فراخونی می شود.

در تابع LogError جزئیات استثناء در فایل متنی لاگ به همراه تاریخ و ساعت ثبت خواهد شد.

 

#C

protected void RaiseException(object sender, EventArgs e)
{
    try
    {
        int i = int.Parse("Mudassar");
    }
    catch (Exception ex)
    {
        this.LogError(ex);
    }
}
 
private void LogError(Exception ex)
{
    string message = string.Format("Time: {0}", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"));
    message += Environment.NewLine;
    message += "-----------------------------------------------------------";
    message += Environment.NewLine;
    message += string.Format("Message: {0}", ex.Message);
    message += Environment.NewLine;
    message += string.Format("StackTrace: {0}", ex.StackTrace);
    message += Environment.NewLine;
    message += string.Format("Source: {0}", ex.Source);
    message += Environment.NewLine;
    message += string.Format("TargetSite: {0}", ex.TargetSite.ToString());
    message += Environment.NewLine;
    message += "-----------------------------------------------------------";
    message += Environment.NewLine;
    string path = Server.MapPath("~/ErrorLog/ErrorLog.txt");
    using (StreamWriter writer = new StreamWriter(path, true))
    {
        writer.WriteLine(message);
        writer.Close();
    }
}

VB.Net

Protected Sub RaiseException(sender As Object, e As EventArgs)
    Try
        Dim i As Integer = Integer.Parse("Mudassar")
    Catch ex As Exception
        Me.LogError(ex)
    End Try
End Sub
 
Private Sub LogError(ex As Exception)
    Dim message As String = String.Format("Time: {0}", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))
    message += Environment.NewLine
    message += "-----------------------------------------------------------"
    message += Environment.NewLine
    message += String.Format("Message: {0}", ex.Message)
    message += Environment.NewLine
    message += String.Format("StackTrace: {0}", ex.StackTrace)
    message += Environment.NewLine
    message += String.Format("Source: {0}", ex.Source)
    message += Environment.NewLine
    message += String.Format("TargetSite: {0}", ex.TargetSite.ToString())
    message += Environment.NewLine
    message += "-----------------------------------------------------------"
    message += Environment.NewLine
    Dim path As String = Server.MapPath("~/ErrorLog/ErrorLog.txt")
    Using writer As New StreamWriter(path, True)
        writer.WriteLine(message)
        writer.Close()
    End Using
End Sub

دانلود کدها

آموزش ASP.Net با C#

معرفی ASP.NET MVC

در این پست از وب سایت آکادمی برنامه نویسان به معرفی ASP NET MVC خواهیم پرداخت و خواهیم گفت  ASP.NET MVC چیست و چه کاربردی هایی دارد .

معرفی ASP NET MVC

Model-View-Controller یا MVC الگویی است که یک برنامه کاربردی را به سه بخش اصلی زیر تفکیک می کند :

  1. Model
  2. View
  3. Controller

چهار چوب ASP.NET MVC یک جایگزین ASP.NET Web Form ها برای ساخت برنامه های تحت وب است. چهار چوب ASP.NET MVC سبک بوده و قابلیت تست پذیری بالایی دارد و همچنین یکسری از ویژگی های ASP.NET Form  را مانند master page ها ، سیستم های احراز هویت داراست. فریمورک MVC  در اسمبلی System.Web.Mvc تعریف شده است و کنترل کاملی برروی JavaScript،HTML و CSS دارد. همچنین استفاده از آن برای ساخت برنامه های با مقیاس بزرگ که تیم های مختلفی برروی آن کار می کنند پیشنهاد می شود.

الگوی طراحی MVC

معرفی asp net mvc

مزایای یک برنامه تحت وب  MVC

فریمورک ASP.NET MVC دارای مزایای زیر است :

    • مدیریت ساده  پیچیدگی ها  به وسیله تقسیم کردن برنامه به قسمت های Model ، View و Controller
    • عدم استفاده از view state و فرم های سروری
    • کنترل کامل برروی HTML، JavaScripts و CSS
    • پشتیبانی بهتر از آزمون TTD
    • به خوبی برای پروژه هایی که به وسیله تیم های بزرگ پشتیبانی می شود کار می کند و همچنین مناسب برای طراحان وبی است که نیاز زیادی به کنترل کامل برروی رفتار های برنامه دارند.
    • به صورت پیش فرض از احراز هویت Facebook  و google  پشتیبانی می کند.
  • مدیریت ساده برنامه های بزرگ به وسیله تقسیم بندی آنها با Area ها.

فضاهای نام  ASP.NET MVC

    • System.Web.Mvc
      شامل کلاس ها و اینترفیس هایی است که به وسیله الگوی MVC در ASP.NET  پشتیبانی می شود.این فضای نام شامل کلاس هایی مانند controller ها ، action result ها، view ها ،  partial view ها ، model binder هاست.
    • System.Web.Mvc.Ajax
      شامل کلاس هایی است که اسکریپت های Ajax  را  در یک برنامه ASP.NET MVC پشتیبانی می کند.
    • System.Web.Mvc.Async
      شامل کلاس ها و اینترفیس هایی جهت پشتیبانی یک برنامه MVC  از  اعمال غیرهم زمان .
  • System.Web.Mvc.Html
    شامل کلاس هایی است که کمک  به رندر کردن کنترل های HTML  در یک برنامه MVC  می کند. کلاس های موجود در این فضای نام پشتیبانی میکنند از فرم ها ، کنترل های ورودی ، لینک ها ،partial view ها و اعتبار سنجی.

تفاوت های بین ASP.NET MVC  و Web Form ها

در این قسمت معرفی ASP NET MVC به تفاوت های بین ASP.NET MVC  و Web Form ها خواهیم پرداخت :

[table id=2 /]

ساختار برنامه ASP.NET MVC

ساختار یک برنامه ASP.NET MVC حداقل به سه پوشه View ، Model  و Controller تقسیم می شود همچنین پوشه های دیگری برای نگهداری فایل های اسکریپت و داده و موارد دیگر وجود دارد.

 ASP.NET MVC چیست

    1. Model
      ازمدل برای نگهداری داده کلاس های  ایجاد شده به وسیله Linq to SQL  یا  Entity Framework ، و یا ارجاع به سرویس هایی مانند WCF  استفاده می شود . در نهایت استفاده  از مدل برای ارائه داده ها به View است.
    1. View
      پوشه View برای نگهداری View ها و یا Patial View ها استفاده می شود هر View  عمل خاصی را بر اساس آنچه کلاس کنترلر به آن محول کرده انجام می دهند. معمولا پوشه View  شامل پوشه ای با نام Shared می شود که صفحات و یوزر کنترل هایی که به وسیله بیشتر کنترلر ها استفاده می شود در آن قرار دارد.
  1. Controller
    پوشه کنترلر مجموعه ای از کلاس ها را شامل می شود که هر کلاس فرزند  System.Web.Mvc.Controller است.یک کلاس کنترلر تنها شامل متد ها یی می شود که به آنها متدهای Action  گفته می شود. متدهای Action  مسئول برگرداندن یک Patial View , View ، محتوا ، داده Json  و موارد دیگر است.

اکشن ها

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

    1. [HttpGet] اکشن ها ی HttpGet برای اجرای درخواست هایی که مستقیما از کاربر می رسد و یا به عبارتی درخواست ها برای اولین بار  به وسیله متد اکشن دریافت می شود.
  1.  [HttpPost]
    اکشن های [HttpPost] تنها زمانی فراخوانی می شوند که قبلا در سمت کاربری بازدید شده اند و کاربر یک فرم HTML را به وسیله دکمه Submit  ارسال می کند همچنین وقتی که این نوع اکشن فراخوانی می شود در آن می توان همه مقادیر کنترل ها را به وسیله   FormCollection از فرم HTML  بدست آورد. یک متد اکشن می تواند انواع مختلفی از اطلاعات و مقادیر را برای کاربر برگرداند. ما می توانیم انواع مختلفی را برای کاربر از یک متد اکشن برگردانیم اما بیشتر از ActionResult استفاده می کنیم زیرا   ActionResult والد انواع مخلتف است.

Area  ها در ASP.NET MVC

در نسخه ASP.NET MVC 2.0 مایکروسافت ویژگی جدیدی با نام Area ها را معرفی کرد. Area ها برای تقسیم بندی یا مجزا کردن یک برنامه بزرگ به چندین برنامه MVC استفاده می شود . به عنوان نمونه :

 

زمانیکه شما یک area  را به پروژه اضافه می کنید یک route (مسیر) برای area  در فایل AreaRegistration تعریف می شود.این route درخواست های رسیده از URL  به یک area  هدایت می کند.

طراحی سایت مشهد

 آموزش طراحی سایت مشهد

دسترسی به داده ها در ASP.Net MVC با استفاده از Entity Framework و HTML Helper ها

در این مقاله نحوه دسترسی به داده ها در ASP.Net MVC از جدول پایگاه داده SQL  با استفاده از Entity Framework و همچنین نحوه ایجاد لینک ها با استفاده از HTML helper های موجود ASP.Net MVC شرح داده می شود.

مرحله ۱ – دسترسی به داده ها در ASP.Net MVC

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

CREATE DATABASE MVC;  
  
USE MVC;  
  
CREATE TABLE dbo.Students(ID int, Name varchar(50), Gender varchar(6), Fees int);  
  
INSERT INTO dbo.Students  
VALUES(1, 'Harry', 'Male', 2500);  
  
INSERT INTO dbo.Students  
VALUES(2, 'Jane', 'Female', 2400);  
  
INSERT INTO dbo.Students  
VALUES(3, 'Emma', 'Female', 2100);  
  
INSERT INTO dbo.Students  
VALUES(4, 'Roster', 'Male', 2500);  
  
INSERT INTO dbo.Students  
VALUES(5, 'Chris', 'Male', 2900);  
  
INSERT INTO dbo.Students  
VALUES(6, 'Evan', 'Male', 2200);  
  
INSERT INTO dbo.Students  
VALUES(7, 'Cathlie', 'Female', 2550);  
  
INSERT INTO dbo.Students  
VALUES(8, 'Jack', 'Male', 2500);  
  
INSERT INTO dbo.Students  
VALUES(9, 'Jone', 'Male', 2900);  
  
INSERT INTO dbo.Students  
VALUES(10, 'Videra', 'Female', 2550);  
  
INSERT INTO dbo.Students  
VALUES(11, 'Sara', 'Female', 2900);  
  
INSERT INTO dbo.Students  
VALUES(12, 'Mak', 'Male', 2500);  
  
INSERT INTO dbo.Students  
VALUES(13, 'Max', 'Male', 2550);  
  
INSERT INTO dbo.Students  
VALUES(14, 'Brock', 'Male', 2900);  
  
INSERT INTO dbo.Students  
VALUES(15, 'Eddie', 'Male', 2500);  
  
INSERT INTO dbo.Students  
VALUES(16, 'Edna', 'Female', 2500);

مرحله ۲ – دسترسی به داده ها در ASP.Net MVC

یک پروژه جدید MVC  در ویژوال استدیو با نام MVCDataAccessByEntityFrame ایجاد کنید .

MVC Project

empty templet

مرحله ۳

با استفاده از Nuget package manager در Solution Explorer فریم ورک Entity برروی پروژه نصب کنید.

nuget package manager

solution explorer

مرحله ۴

به پوشه Models  در Solution Explorer رفته و ۲ فایل کلاس به آن اضافه کنید.

Models

مرحله ۵

کدهای زیر را در کلاس های ایجاد شده در مرحله قبل کپی کنید.

Students.cs

using System.ComponentModel.DataAnnotations.Schema;  
  
namespace MVCDataAccessByEntityFrame.Models  
{  
    [Table("Students")]  
    public class Students  
    {  
        public int ID { get; set; }  
        public string Name { get; set; }  
        public string Gender { get; set; }  
        public int Fees { get; set; }  
    }  
}

StudentsContext.cs

using System.Data.Entity;  
namespace MVCDataAccessByEntityFrame.Models  
{  
    public class StudentsContext : DbContext  
    {  
        public DbSet<Students> Students { get; set; }  
    }  
}

مرحله ۶

به پوشه Controllers رفته و یک کنترلر به آن اضافه کنید.

Controllers

مرحله ۷

کدهای زیر را به کنترلر اضافه کنید.

using MVCDataAccessByEntityFrame.Models;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web.Mvc;  
  
namespace MVCDataAccessByEntityFrame.Controllers  
{  
    public class StudentsController : Controller  
    {  
        public ActionResult Index()  
        {  
            StudentsContext studentsContext = new StudentsContext();  
            List<Students> students = studentsContext.Students.ToList();  
            return View(students);  
        }  
        public ActionResult Details(int id)  
        {  
            StudentsContext studentsContext = new StudentsContext();  
            Students students = studentsContext.Students.Single(stu => stu.ID == id);  
            return View(students);  
        }  
  
    }  
}

مرحله ۸

Ctrl + Shift + B فشرده و سپس برروی متد index راست کلیک کرده و گزینه add a view را انتخاب کنید.

index method

مرحله ۹ 

کد های زیر را به Index.cshtml اضافه کنید.

@model IEnumerable<MVCDataAccessByEntityFrame.Models.Students>  
@using MVCDataAccessByEntityFrame.Models;  
@{  
    ViewBag.Title = "Students List";  
}  
  
<h2>Students List</h2>  
<ol start="1">  
    @foreach (Students students in @Model)  
    {  
        <li id="item">  
            @Html.ActionLink(students.Name, "Details", new { id = students.ID })  
        </li>  
    }  
</ol>

مرحله ۱۰

برروی متد Details راست کلیک کرده و گزینه add a view را دوباره انتخاب کنید.

add a view

مرحله ۱۱

کدهای زیر را به  details.cshtml اضافه کنید.

@model MVCDataAccessByEntityFrame.Models.Students  
  
@{  
    ViewBag.Title = "Students Details";  
}  
  
<table border="1">  
    <tr>  
        <td><b>ID:</b></td>  
        <td>  
            @Model.ID  
        </td>  
    </tr>  
    <tr>  
        <td><b>Name:</b></td>  
        <td>@Model.Name</td>  
    </tr>  
    <tr>  
        <td><b>Gender:</b></td>  
        <td>@Model.Gender</td>  
    </tr>  
    <tr>  
        <td><b>Fees:</b></td>  
        <td>@Model.Fees</td>  
    </tr>  
</table>  
<br />  
@Html.ActionLink("Back to Students List", "Index")

مرحله ۱۲

به فایل  web.config در پوشه Views   در Solution Explorer رفته و کدهای زیر را به آن اضافه کنید .

<connectionStrings>  
  <add name="StudentsContext" connectionString="server=ANKITBANSALPC; database = MVC; integrated security = SSPI" providerName="System.Data.SqlClient"/>  
</connectionStrings>

مرحله ۱۳

به فایل Route.config در پوشه App_Start بروید و کد های زیر را در آن کپی کنید .

using System.Web.Mvc;  
using System.Web.Routing;  
  
namespace MVCDataAccessByEntityFrame  
{  
    public class RouteConfig  
    {  
        public static void RegisterRoutes(RouteCollection routes)  
        {  
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");  
  
            routes.MapRoute(  
                name: "Default",  
                url: "{controller}/{action}/{id}",  
                defaults: new { controller = "Students", action = "Index", id = UrlParameter.Optional }  
            );  
        }  
    }  
}

مرحله ۱۴

همه تغییرات را ذخیره کرده و F5 را فشرده تا پروژه اجرا شود سپس شما لیست دانش آموزان را خواهید دید که با کلیک برروی هر یک از آنها می توانید جزئیات اطلاعات هر یک را ببینید.

student list

details

View State چیست و چگونه در ASP.Net کار می کند

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

یک برنامه وب ناپایدار است به این معنی هر بار که یک درخواست از سرور جهت دریافت یک صفحه می کنیم یک نمونه جدید از آن صفحه ساخته می شود و در این  رفت و برگشت صفحه قبلی از بین می رود. دلیل این اتفاق هم این است که سرور همه کنترل های ایجاد شده صفحه را بعد از رفت و برگشت نابود می کند.بنابراین برای حفظ مقادیر کنترل ها از تکنیک مدیریت وضعیت (state management) استفاده می کنیم.

تکنیک مدیریت وضعیت

مدیریت وضعیت به ۲ دسته تقسیم می شود :

View State چیست

 

 

 

 

 

 

 

 

 

 

 

 

اکنون به شرح View Sate  می پردازیم:

View State چیست ؟ 

View State روشی برای حفظ کردن مقادیر صفحه و کنترل ها هنگام  رفت و برگشت صفحه است. که جزء تکنیک های مدیر وضعیت در سطح صفحه است. View State به طور پیش فرض فعال است و بطور معمول داده های هر کنترل صفحه را سریال می کند بدون در نظر گرفتن اینکه آن صفحه    post-back باشد.

برای درک بهتر یک پروژه ایجاد می کنیم تا ببینیم بدون View State چه مشکلاتی ایجاد می شود :

۱- یک پروژه از نوع  ASP.NET Empty Web Application ایجاد کرده و یک فرم وب (Web Form) به آن اضافه کنید.

۲- ۲ تکست باکس و ۲ دکمه به صفحه اضافه کنید .کدهای صفحه باید به شکل زیر باشد :

<%@ page language="C#" autoeventwireup="true" codebehind="WebForm6.aspx.cs" inherits="view_state.WebForm6" %>
 
<!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></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        User Name:-<asp:textbox id="TextBox1" runat="server"></asp:textbox>
        <br />
        Password&nbsp; :-<asp:textbox id="TextBox2" runat="server"></asp:textbox>
        <br />
        <asp:button id="Button1" runat="server" onclick="Button1_Click" text="Submit" />
        <asp:button id="Button3" runat="server" onclick="Button3_Click" text="Restore" />
    </div>
    </form>
</body>
</html>

حال کد های زیر را بنویسید :

//Declaration of a and b
public string a, b;
protected void Button1_Click(object sender, EventArgs e)
{
    //TextBox1 and TextBox2 Value is Assigning on the variable a and b
    a = TextBox1.Text;
    b = TextBox2.Text;
    //after clicking on Button TextBox value Will be Cleared
    TextBox1.Text = TextBox2.Text = string.Empty;
}
 
protected void Button3_Click(object sender, EventArgs e)
{
    //value of variable a and b is assingning on TextBox1 and Textbox2
    TextBox1.Text = a;
    TextBox2.Text = b;
}

خروجی باید به شکل زیر باشد:

آموزش ASP.NET

ASP.NET

 

 

 دلیل این اتفاق این است که همه کنترل هاکلاس هایی هستند که  برروی سرور ایجاد می شوند و بعد اینکه صفحه با فرمت HTML  به کاربر برگشت می شود همه اشیاء موجود در سرور از بین می رود.

بعد از اینکه برروی دکمه Submit کلیک می کنیم مقدار user name و password  به سرور ارسال می گردد و ما نمی توانیم مقدار آن را بازیابی کنیم زیرا بعد از postback  نمونه کنترل ایجاد شده از بین می رود و با کلیک کردن برروی دکمه  Restore سرور درخواست جدید دریافت می کند و نمی تواند مقدار TextBox را بازیابی کند.

ویژگی های View State

سه  ویژگی اصلی  view state :

  1. مقدار کنترل های را بعد از post-back بدون استفاده از session حفظ می کند.
  2. مقادیر صفحات و ویژگی کنترل های  تعریف شده در صفحه را ذخیره می کند.
  3. یک Provider سفارشی View State ایجاد می کند که این امکان را به شما می دهد اطلاعات View State را در پایگاه داده ذخیره کنید.

حال به نحوه ذخیره کردن مقدار در View State در مراحل قبل می پردازیم :

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

protected void Button1_Click(object sender, EventArgs e)
{
    //Value of Textbox1 and TectBox2 is assigin on the ViewState
    ViewState["name"] = TextBox1.Text;
    ViewState["password"] = TextBox2.Text;
    //after clicking on Button TextBox value Will be Cleared
    TextBox1.Text = TextBox2.Text = string.Empty;
}
protected void Button3_Click(object sender, EventArgs e)
{
    //If ViewState Value is not Null then Value of View State is Assign to TextBox
    if (ViewState["name"] != null)
    {
        TextBox1.Text = ViewState["name"].ToString();
    }
    if (ViewState["password"] != null)
    {
         TextBox2.Text = ViewState["password"].ToString();
    }
}

خروجی باید به شکل زیر باشد :

آموزش asp.net با c#

آموزش گام به گام طراحی سایت با asp net

 

بعد از کلیک برروی دکمه Submit مقدار user name و password به  View State تحویل داده می شود و  View State مقدار آنها را در طی فرایند post-back ذخیره میکند.

بعد از کلیک برروی دکمه Restore ما می توانیم به این مقادیر دست پیدا کنیم . مقادیر در طی فرایند post-back حفظ شده و در یک فیلد مخفی که به صروت رشته است ذخیره می گردد.

مزایای View state :

  1. راحتی در استفاده.
  2. نیاز به منابع سرور نیست : View State در سختار  page load قرار دارد.
  3. بهبود امنیت : می توان آن را رمز گزاری و رمز گشائی کرد.

معایب View state :

  1. ریسک امنیتی : اطلاعات View state  در سورس صفحه وب قابل روئیت است . شما می توانید آنها را رمز گزاری و رمز گشائی کنید. بنابراین برای  اطلاعات حساس از این روش استفاده نکنید.
  2.  Performance (کارایی)  : در صورتیکه اطلاعات زیادی داریم نباید از این تکنیک استفاده کنیم چون View state همه آنها را در صفحه ذخیره می کند و این باعث می شود که لود صفحه کند شود.
  3. محدودیت Device : موبایل ها شاید به اندازه کافی حافظه برای ذخیره میزان زیاد داده   View state را نداشته باشند.
  4. از آن تنها برای ذخیره مقادیر صفحات کوچک استفاده می شود.

چه مواقعی باید از View State استفاده کرد:

  1. وقتی مقدار داده کم باشد
  2. عدم استفاده از داده های امن

 نحوه فعال و غیر فعال کردن View State

View State را می توان در یک کنترل و یا  در تمام صفحه فعال یا غیر فعال کرد برای غیر فعال کردن View State در یک کنترل مقدار پراپرتی EnableViewState برابر false قرار می دهیم.

TextBox1.EnableViewState=false

برای غیر فعال کردن View State در کل صفحه مقدار EnableViewState در کد صفحه false قرار می دهیم مانند کد زیر :

<%Page Language=”C#” EnableViewState=”false”