PDA

View Full Version : خاصیت جالب ReadOnly در .Net



آریوس1985
سه شنبه 31 شهریور 1388, 16:12 عصر
با سلام خدمت دوستان
من به یک مشکل برخورده بودم که باعث شد خیلی بگردم و نهایتا یک نکته ی خیلی کوچک ولی جالب رو پیدا کردم.
خاصیت ReadOnly
بله مسلما خیلی از شماها تو دلتون میگید این که دیگه پست زدن نداشت ولی خوب شاید واسه بعضی ها جالب باشه.
برای نمایش یک سری داده که در واقع قیمت بودند(یه نوع فاکتور)، احتیاج به کنترلی داشتم که قیمت ها رو نشون بده و اصولا این جور مواقع ناخودآگاه به سمت Label میریم.
بعد از نمایش مقادیر و در هنگام Post Back متوجه شدم که چون داده های Lebel ها رو با Javascript پر کردم، نمیتونم به داخل Label دسترسی داشته باشم.
همه ی Label ها حذف شدند و جای آن ها رو TextBox ها گرفتند. ولی دوباره با مشکل جدیدی روبه رو شدم :
برای جلوگیری از دسترسی کاربر به اعداد داخل TextBox ها باید خاصیت ReadOnly را فعال می کردم، اما بعد از اینکار همان حالت Label ها بو وجود میآمد یعنی هنگام PostBack هیچ داده ای را نمی توان استخراج کرد.(در صورت استفاده از Enable=False هم رنگ Text را نمیتوان تغییر داد)
زیاده گویی نکنم، یکی از خاصیت های .NET 2 , 3.5 این خاصیته که در صورتیکه از منوی Properties خاصیت ReadOnly را فعال کنیم هنگام PostBack مقدار Text داخل TextBox همراه با ViewState به سرور ارسال نخواهد شد(این در حالیست که در .NET 1.1 این امر اتفاق نمی افتاد )
اما در صورتیکه این خاصیت از طریق کد فعال شود، می توان به مقدار درون TextBox دسترسی داشت.

txtFinalPrice_Final.Attributes.Add("readOnly", "readOnly");

Exception
سه شنبه 31 شهریور 1388, 20:44 عصر
یکی از خاصیت های .NET 2 , 3.5 این خاصیته که در صورتیکه از منوی Properties خاصیت ReadOnly را فعال کنیم هنگام PostBack مقدار Text داخل TextBox همراه با ViewState به سرور ارسال نخواهد شد(این در حالیست که در .NET 1.1 این امر اتفاق نمی افتاد )
اما در صورتیکه این خاصیت از طریق کد فعال شود، می توان به مقدار درون TextBox دسترسی داشت.
دلیل این موضوع اینه که وقتی شما از طریقه Propertyهای خود کنترل این کار رو انجام میدین، در اصل دارین ویژگی disabled بهش میدین ولی در این حالت دارین ویژگی readonly بهش میدین.
طبق استاندارد html، کنترلهای disabled نمیتونن successful باشن ولی کنترلهای readonly میتونن successful بشن. (کنترلی که successful نشه، اطلاعاتش سمت سرور ارسال نمیشه)
برای دیدن استاندارد اینجا رو ببینید: http://www.w3.org/TR/html401/interact/forms.html#h-17.12