ViewState برای TextBox در ASP.NET

دوشنبه 4 اسفند 1393

در این مقاله میخواهیم کاربرد ViewState برای TextBox در Asp.Net را بررسی کنیم

ViewState برای TextBox در ASP.NET

این بحث کاربرد های ViewState در TextBox ها را توضیح میدهد. یکی از سوالات متداول این است که کاربرد ViewState  در TextBox را توضیح دهید. و معروفترین و رایج ترین جواب  به این سوال این است که View State متن داخل TextBox  را بعد از پست بک  صفحه حفظ میکند.
اجازه دهید با چند مثال تمرینی جواب های درست را بیابیم. روش زیر را دنبال کنید و جواب معتبر را بیابید.

گام1
ویژوال استودیو را باز کنید و یک صفحه ی وب فرم بسازید. یک TextBox و یک کنترل Button را با کشیدن و رها کردن به صفحه اضافه کنید.

    <div>  
           Name<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  
           <br />  
           <asp:Button ID="btnSubmit" runat="server"   
               Text="Submit" />  
    </div>  

گام2
بر روی TextBox  راست کلیک کرده وEnableViewState را False و ViewStateMode را Disable قرار دهید.


سپس HTML TextBox به صورت زیر خواهد بود :

    Name<asp:TextBox ID="TextBox1" runat="server"   
                EnableViewState="False" ViewStateMode="Disabled"  
     ></asp:TextBox>  

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


حال توجه داشته باشید که ما داده را از دست نخواهیم داد حتی اگر ViewState برای TextBox غیرفعال باشد. حال یک سوال بزرگ پیش میاید.
داده های TextBox زمانی که EnableViewState  برابر با False است از کجا می آیند ؟
 زمانیکه  EnableViewState برابر با False است داده های TextBox از کلاس System.Web.UI.WebControls.TextBox می آیند که این یکی از کلاس هایی است که با رابط   IpostBackDataHandler اجرا میشود. این رابط نیاز به  متد LoadPostData دارد. پس از آنکه مقداردهی اولیه صفحه انجام شد و قبل از آنکه بارگذاری  ViewState نیاز به استناد داشته باشد (LoadViewState) , سپس اگر کنترل اجرای IpostBackDataHandler انجام شد , بارگذاری داده ی فرم استدعا میشود (LoadPostData)  . ویژگی های متن کنترل TextBox  میتواند ست شود حتی اگر مکانیزم View State غیرفعال باشد.
به طور کامل مکانیزم View State  برای کنترل TextBox را غیرفعال کنید
مکانیزم View State برای کنترل TextBox  ونمیتواند کاملا غیرفعال شود. برای مثال View State  زمانیکه رویداد TextChanged  تحت کنترل است بسیار مفید میباشد (برای مقایسه ی این ارزش با ارزش قبلی). این همچنین میتواند استفاده شود زمانی که ارزش هایی که ست شده اند با دیگری که مربوط به ارزش کنترل میباشد متفاوت باشد (برای مثال Forecolor و FontSize و غیره).
تمام کنترل هایی که با IpostBackDataHandler ارزش هایشان را بارگذاری میکنند حتی اگر ViewState خاموش باشد.
این لیستی کنترل هاییست که با IpostBackDataHandler کار میکند:
CheckBox
ChechBoxList
DropDownList
ListBox
RadioButton
TextBox

کاربرد های ViewState  برای TextBox :
ViewState تنها برای  انجام حالت داده درون کنترل نیست. تعداد بسیار زیادی مدیریت حالت وجود دارد که برای ViewState انجام داده شده است برای کنترل هایی نظیر ForeColor , BackColor و غیره. حال یک نگاه دقیق تر به مثال زیر که من در آن رنگ پس زمینه و پیش زمینه ی TextBox را با توجه به دکمه هایی رادیویی که کاربر انتخاب میکند تنظیم میکنم.
ابتدا طراحی فرم وب را مانند زیر انجام دهید :

    <table class="style1">  
                <tr>  
                    <td>  
                        BackColor  
                    </td>  
                    <td>  
                           
                        <asp:RadioButtonList ID="rbLBackColor" runat="server" AutoPostBack="True"   
                            onselectedindexchanged="rbLBackColor_SelectedIndexChanged"   
                            RepeatDirection="Horizontal">  
                            <asp:ListItem>Red</asp:ListItem>  
                            <asp:ListItem>Green</asp:ListItem>  
                            <asp:ListItem>Blue</asp:ListItem>  
                        </asp:RadioButtonList>  
                    </td>  
                </tr>  
                <tr>  
                    <td>  
                        ForeColor  
                    </td>  
                    <td>  
                           
                        <asp:RadioButtonList ID="rbLForeColor" runat="server" AutoPostBack="True"   
                            onselectedindexchanged="rbLForeColor_SelectedIndexChanged"   
                            RepeatDirection="Horizontal">  
                            <asp:ListItem>Red</asp:ListItem>  
                            <asp:ListItem>Green</asp:ListItem>  
                            <asp:ListItem>Blue</asp:ListItem>  
                        </asp:RadioButtonList>  
                    </td>  
                </tr>  
                <tr>  
                    <td>  
                        Name  
                    </td>  
                    <td>  
                        <asp:TextBox ID="TextBox1" runat="server" EnableViewState="False"  
                            ViewStateMode="Disabled"></asp:TextBox>  
                    </td>  
                </tr>  
                <tr>  
                    <td>  
                           
                    </td>  
                    <td>  
                        <asp:Button ID="btnSubmit" runat="server" Text="Submit" EnableViewState="False" OnClick="btnSubmit_Click" />  
                    </td>  
                </tr>  
    </table>  

به یاد داشته باشید که EnableViewState و  ViewStateMode برای TextBox به ترتیب False و Disable باشند.
حال با دابل کلیک بر روی لیست دکمه های رادیویی وارد بخش کدزنی آن شده و کد زیر را وارد کنید :

    protected void rbLBackColor_SelectedIndexChanged(object sender, EventArgs e)  
    {  
        if(rbLBackColor.SelectedItem.Value.Equals("Red"))  
        {  
            TextBox1.BackColor =Color.Red ;  
        }  
        else if(rbLBackColor.SelectedItem.Value.Equals("Green"))  
        {  
            TextBox1.BackColor = Color.Green;  
        }  
        else if(rbLBackColor.SelectedItem.Value.Equals("Blue"))  
        {  
            TextBox1.BackColor = Color.Blue;  
        }  
    }  
      
    protected void rbLForeColor_SelectedIndexChanged(object sender, EventArgs e)  
    {  
        if (rbLForeColor.SelectedItem.Value.Equals("Red"))  
        {  
            TextBox1.ForeColor = Color.Red;  
        }  
        else if (rbLForeColor.SelectedItem.Value.Equals("Green"))  
        {  
            TextBox1.ForeColor = Color.Green;  
        }  
        else if (rbLForeColor.SelectedItem.Value.Equals("Blue"))  
        {  
            TextBox1.ForeColor = Color.Blue;  
        }  
    }  

حالا برنامه رو اجرا کنید:

حال با انتخاب هر یک از این گزینه ها میتوان شاهد تغییر آن در TextBox باشیم :

تا اون موقع همه چیز نرمال و طبیعی می باشد حال بر روی دکمه کلیک کنید و به شما اخطار داده خواهد شد که وضعیت BackColor و ForeColor بعد از PostBack تغییر خواهند کردپس در اینجا ViewState به تصویر می آید.اگر ما قابلیت View برای TextBox به True تغییر دهیم


    <asp:TextBox ID="TextBox1" runat="server" ></asp:TextBox>  

حال اگر ما دکمه را حتی بعد از PostBack بفشاریم ,حالت های ForeColor و  BackColor مانند گزینه های انتخاب شده تغییر خواهند کرد.این یک چیز کوچک اما زیرکانه برای View State در ASP.NET میباشد.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید