PDA

View Full Version : سوال: page unique id in c#.net



myaffa
جمعه 06 بهمن 1391, 21:07 عصر
سلام اگه کسی میدونه کمکم کنه
من تو سی شارپ تحت وب میخوام برای هر صفحم یک آیدی یکسان داشته باشم
درواقع کاری که میخوام بکنم اینه که برای هر پنجره از یک صفحه مثلا default.aspx چند متغیر داشته باشم که فقط تو اون صفحه یکتا باشه و اگر تو پنجره یا تب دیگه ای این پنجره رو باز کردم این متغییر ها مقدار جدیدی داشته باشن که مربوط به صفحه قبلی نشه و تو صفحه جدید مقادیرش با صفحه قبلی فرق کنه
من اینکاری میخوام با سشن ها انجام بدم مثلا کد زیر
session["uc"+page.uniqueid]="1";
session["Menue"+page.uniqueid]="1";
این کد کار نمیکنه اگه ممکنه یه یه روش دیگه یا یه کدی که بتونم باهاش یک شماره یکتا به صفحم بدم بهم بدین مرسی از همه

myaffa
جمعه 06 بهمن 1391, 21:12 عصر
این کدو پیدا کردم ولی با هر بار رفرش صفحه یه کد جدید میده من میخوام اگه صفحه رفرش شد هم کد عوض نشه
private string GetUniqueKey()
{
int maxSize = 8;
int minSize = 5;
char[] chars = new char[62];
string a;
a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX YZ1234567890";
chars = a.ToCharArray();
int size = maxSize;
byte[] data = new byte[1];
System.Security.Cryptography.RNGCryptoServiceProvi der crypto = new System.Security.Cryptography.RNGCryptoServiceProvi der();
crypto.GetNonZeroBytes(data);
size = maxSize;
data = new byte[size];
crypto.GetNonZeroBytes(data);
StringBuilder result = new StringBuilder(size);
foreach (byte b in data)
{ result.Append(chars[b % (chars.Length - 1)]); }
return result.ToString();
}

کار این همه کدو تابع زیرم انجام میده
Page.Session.SessionID
ولی این کدم تو هر بار رفرش صفحه عوض میشه کمکم کنید

raziee
دوشنبه 09 بهمن 1391, 22:17 عصر
شما به وسیله ی ViewState میتونید برای هر صفحه مقدادیری رو داشته باشید.

استفاده از Session برای هدف شما صحیح نیست.

r_s1389@yahoo.com
دوشنبه 09 بهمن 1391, 23:00 عصر
شما به وسیله ی ViewState میتونید برای هر صفحه مقدادیری رو داشته باشید.

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

raziee
سه شنبه 10 بهمن 1391, 00:14 صبح
سلام
میشه با کد توضیح بدید
اگر خروجی HTML تولید شده از صفخات ASPX رو مشاهده کنید میبینید که دارای یک input از نوع hidden هست. چیزی شبیه به :
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="pTTeqU3Nx7BnPER1KUkdfIGbS5+DpPXkcIvqYuG/UPTBFQxnD9qofvMsMKt0gIkt1j8XC/rfgsEeN+Pc3dy4yloBZgrA+w8Y40tysq040htqdhi7SvVRAJ8p uxybpjVo4UxvT63HimedFCbBZN/ZlAQ5X2x/B4ilC1AVZTk0Q5efXRicoD9uPANunLPgVlhYIFFkKCkvArgI9V V/gtSpxVcWfGbeJRLE2VfniBWwd81UPi6bFa0jh5nWeABXJ3ftJL 97/N/5EwC62Ic9IjpdL5mHR2jHktBb/+PeNMOPVoyy2GL5BlIh8uGNxbKgD37n" />

کنترل های دات نت در زمان Render وضعیت خودشون رو به ViewState اضافه میکنن و بعد زمانی که صفحه ای به سرور فرستاده میشه این ViewState پردازش میشه و وضعیت کنترل ها به کنترل ها برگردونده میشه.
البته میشه این فعالیت ها رو به دلخواه override کرد.
همچنین میشه مقادیری رو به این ViewState اضافه کرد و بعدا دریافت کرد.
به عنوان مثال اگه بخواهیم بدونیم صفحه ی ما چه مدت زمان در کلاینت بوده تا به سرور Post بشه میشه از کد زیر استفاده کرد:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
DateTime pageTime = (DateTime)ViewState["DateTime"];


Response.Write((DateTime.Now - pageTime).TotalMilliseconds);
}

ViewState["DateTime"] = DateTime.Now;
}

لینک های مفید:
Understanding ASP.NET View State (http://msdn.microsoft.com/en-us/library/ms972976.aspx)
Taking a Bite Out of ASP.NET ViewState (http://msdn.microsoft.com/en-us/library/ms972427.aspx)
نمایش حجم ViewState برنامه‌های ASP.NET WebForms (http://www.dotnettips.info/post/504/%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D8%AD%D8%AC%D9%85-viewstate-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%8 7%D8%A7%DB%8C-asp-net-webforms)
بدست آوردن اندازه ViewState‌ یک صفحه ASP.Net (http://www.dotnettips.info/post/77/%D8%A8%D8%AF%D8%B3%D8%AA-%D8%A2%D9%88%D8%B1%D8%AF%D9%86-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%D9%87-viewstate%E2%80%8C-%DB%8C%DA%A9-%D8%B5%D9%81%D8%AD%D9%87-asp-net)

myaffa
پنج شنبه 12 بهمن 1391, 20:41 عصر
ممنون دوست عزیز از کمک شما فقط یک سوال
1. ویو استیت ها تو هر صفحه تنهاست درسته؟ یعنی تو صفحه دیگه این ویو استیت وجود نخواهد داشت؟
2. اگر صفحه رفرش بشه آیا باز هم این ویو استیت سر جاش و با همون مقدار باقیه یا اینکه عوض از بین میره؟

raziee
پنج شنبه 12 بهمن 1391, 23:10 عصر
ممنون دوست عزیز از کمک شما فقط یک سوال
1. ویو استیت ها تو هر صفحه تنهاست درسته؟ یعنی تو صفحه دیگه این ویو استیت وجود نخواهد داشت؟
2. اگر صفحه رفرش بشه آیا باز هم این ویو استیت سر جاش و با همون مقدار باقیه یا اینکه عوض از بین میره؟

1. در هر صفحه ViewState ها متفاوت هستند. اساس کار ViewState نگهداری وضعیت هر صفحه هست لینک های داده شده رو مطالعه کنید.
2. بستگی داره. به طور کلی زمانی که صفحه به سرور Post میشه در سرور این ViewState ها DeCode شده و قابل استفاده در برنامه خواهند بود و دوباره زمانی که صفحه Render میشه این ViewState دوباره ایجاد میشه. این به کد نویسی شما بر میگرده اما اگه به صورت صحیح کد نویسی کنید از بین نخواهد رفت.