آشنایی با  Server Side در Asp.Net WebForm
21 روز پیش نویسنده: علیرضا بهارلویی

آشنایی با Server Side در Asp.Net WebForm

بخش سوم

آشنایی با سمت سرور صفحات Asp.Net

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

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

اما ممکن است این سوال پیش آید که WebForm  با توجه به دوزبانه بودن سمت سرور آیا تفاوتی را شامل میشود؟ پاسخ خیر است زیرا ذات سرور یکسان است و نوشتار کد در سمت سرور متفاوت است. در اصل شیوه کار به صورت مشترک تعریف شده است.

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

namespace NamePage
{
   public partial class About : Page
   {
       protected void Page_Load(object sender, EventArgs e)
       {
        
       }
     
   }
}

نکته 1: برای هر صفحه سمت سرور یک نام دسترسی در نظر گرفته میشود. NamePage در این قسمت همان نام دسترسی می باشد. این صفحه در زبان برنامه نویسی که اصطلاحا کلاس نامیده میشود, یک کلاس برای صفحه درباره ما (About) می باشد . در بخش Page_Load رویدادهای لازم برای این کلاس نوشته میشود که به صورت سراسری تعریف میشود و هر متد دیگری که در این صفحه تعریف شود میتواند خاصیت های تعریف شده اش در Page_Load را جهت استفاده قرار دهد تا کلاس از آن بهره مند شود.

به طور مثال:

protected void Page_Load(object sender, EventArgs e)
{
  Time();
}

private void Time()
{
  DateTime dt = DateTime.Today;
} 

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

باید توجه داشت اکثر متدهای تعریف شده در سمت صفحه سرور با توجه به رویداد آیتم هایی است که در سمت کاربری تعریف شده است.

مثال:

در سمت صفحه کاربری این قطعه کد را مینویسیم:

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
   <asp:Label Text="text" ID="lbl" runat="server" />
   <asp:TextBox runat="server"  ID="txt" />
   <asp:Button Text="text"  runat="server" OnClick="Btn_Click" />
</asp:Content>

در قطعه کد بالا که در سمت کاربری ایجاد شده یک Label با ID="lbl" نوشته شده و یک TextBox با ID="txt" نوشته شده است. این موارد را میخواهیم در سمت سرور مقدار دهی کنیم پس نیاز داریم یک رویداد در سمت سرور ایجاد نماییم به همین خاطر از یک Button با خاصیت کلیک با نام OnClick="Btn_Click" تعریف نموده تا در سمت سرور بتوانیم رویداد آن را بسازیم.

 protected void Btn_Click(object sender, EventArgs e)
 {
     txt.Text = "";
     lbl.Text = "";
 }

در کد بالا در سمت سرور رویدادی برای Btn_Click تعریف شده و نام ID دو مقدار مورد نظر فراخوانی و مقداردهی شده اند.

این روش در اغلب کدها برای کدنویسی WebForm به کار خواهد رفت.

نکته: در این مثال متوجه شدیم که یک رابطه تعاملی بین سمت کاربر و سمت سرور در WebForm‌وجود دارد و این دو با هم داد و ستد اطلاعاتی خواهند داشت.

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

اخرین بحث در سمت سرور WebForm در مورد نحوه نوشتار کوئری های پایگاه داده می باشد. در این نسل از Asp نوشتار و ارتباط دستورات پایگاه داده با ADO.NET می باشد.

دستوراتی که با سی شارپ یا بیسیک راه ارتباطی با Sql  را فراهم می آورد تا داده های پویا را بتوان ذخیره و نگهداری نمود. دستورات با زبان سی شارپ یا بیسیک در سمت صفحه سرور نوشته می شود و قابلیت ارتباط با پایگاه را در هر بخشی  را فراهم می آورد. 

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

نمونه کد:

protected void btn_submit_Click(object sender, EventArgs e)
    {
        SqlConnection sqlcon;
        try
        {
            sqlcon = newSqlConnection("Data Source=.\\SQL2012;Initial Catalog=db;User ID=sa;Password=123");
            sqlcon.Open();
            String strCode = txt_code.Text.ToString();
            String strName = txt_name.Text.ToString();
            String strEmail = txt_email.Text.ToString();
           String strSQL = 
           "INSERT INTO tblEmpReg([code],[name],[email]) VALUES  (@code, @name, @email)";
            SqlCommand sqlcmd = new SqlCommand(strSQL, sqlcon);
            sqlcmd.Parameters.AddWithValue("@code", strCode);
            sqlcmd.Parameters.AddWithValue("@name", strName);
            sqlcmd.Parameters.AddWithValue("@email", strEmail);
            sqlcmd.ExecuteNonQuery();
            sqlcon.Close();
        }
        catch (Exception ex)
        {
            throw ex;
        }
 
    }

 در قطعه کد بالا با SqlConnection ارتباط با پایگاه برقرار شده و با Data Source مسیر ارتباطی مشخص می گردد.

بعد از ارتباط با پایگاه با متد Open() جدول پایگاه در حالت آماده باش قرار میگیرد و مقادیر لازم فراخوانی میشود و با دستور INSERT INTO اطلاعات در پایگاه وارد سازی میشود.

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

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

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

پایان قسمت سوم