PDA

View Full Version : این دستور چرا همیشه اجرا می شه



Programmer_sa
چهارشنبه 24 آبان 1385, 21:10 عصر
چرا در مثال زیر همیشه دستور if اجرا می شود ؟ من که متغیر a رو در page_load تعریف نکردم که بخواد هر وقت که load ، page می شه مقدار صفر داخل آن ریخته شود ؟
دارم قاط می زنم . :گیج: :متعجب: :گریه: لطفا راهنمایی کنید:


using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Member : System.Web.UI.Page
{
int a=0;
protected void Page_Load(object sender, EventArgs e)
{
if (a==0)
{
divscript.InnerHtml = "<script>alert('خسته نباشید')</script>";
a=1;
}
}

}

Programmer_sa
پنج شنبه 25 آبان 1385, 00:44 صبح
یک نفر چواب بده خواهشا
شما همتون برنامه نویس asp.net هستید . یعنی تا حالا به همچین مشکلی بر نخوردید .
خواهش می کنم .
" هل من ناصر ینصرنی "

Y2K
پنج شنبه 25 آبان 1385, 01:25 صبح
در هربار اجرای صفحه اول متغیرهای کلاس مقدار میگیرن و سپس تابع لود اجرا میشه.
و متغیر a برای اعضای کلاس پابلیکه و میشه هرجایی ازش استفاده کرد.

Programmer_sa
پنج شنبه 25 آبان 1385, 02:32 صبح
آقا جان راه حل ارائه بدهید .
چطوری دستور داخل ایف فقط یکبار اجرا شود ؟
ممنون

اَرژنگ
پنج شنبه 25 آبان 1385, 04:05 صبح
مشکله اصلیه شما به احتماله زیاد یک چیزه دیگریه.
شما میخواهید وقتی که کاربر برایه اوّل به صفحه میاد یک چیزی ببینه و بار دوم یک چیزه دیگر؟
و یا اینکه چیزه دیگه؟ شما چکار میخواهید انجام بدید؟
در ضمن شما میدونید که پرنامه نویسی وب استیتلسه (بدونه حافظه) ؟
برایه همین باید یک جا ( در فایل، داتابیس ، کوکی ) بنویسید و هر بار که صفحه لود میشه بهش مراجعه کنید.
بگید که نتیجه ای که میخواهید ببینید چیه و ما راهه حله درست اراعه میدیم.
برایه مثال شما همانطوری که گفتند باید یا از کوکی استفاده کنید و یا اینکه در یک فایل بنویسیس، وگرنه هر با که صفحه لود میشه
مقدار دوباره میشه صفر.
اگر با استفاده از کوکی و یا نوشتن به فایل و یا داتابیس مشکل دارید یک توپیکه جدید در آن مورد بفرستید.

Programmer_sa
پنج شنبه 25 آبان 1385, 10:33 صبح
[quote=اَرژنگ]مشکله اصلیه شما به احتماله زیاد یک چیزه دیگریه.
شما میخواهید وقتی که کاربر برایه اوّل به صفحه میاد یک چیزی ببینه و بار دوم یک چیزه دیگر؟

قربون آدم چیز فهم . آره داداش می خوام اینطوری باشه . :چشمک:

Programmer_sa
پنج شنبه 25 آبان 1385, 13:43 عصر
SomeBody Help Me.

اَرژنگ
پنج شنبه 25 آبان 1385, 14:42 عصر
بازهم بستگی به این داره که هدفتان چیه، فکر کنم راحت ترین راهش استفاده از کوکیه، که دفعه اول شما نگاه میکنید که اگر کوکی ست نشده ، یک کوکی میگزارید ، و دفعات بعدی فقط کوکی را میخوانید.
منتها این روش فقط وقتی کار میکنه کاربر استفاده از کوکی را نفی نکرده باشه.
ولی بازهم اگر یکم بیشتر توضیح بدید که هدفتان چیه راهه بهتر پیشنهاد میکنیم.
یک مثال در وی بی:


If Not Request.Cookies("mycookie") Is Nothing Then Response.Write(Request.Cookies("mycookie").Value.ToString) End If


کلی مثال پیدا میکنید برایه استفاده از کوکی در کوگل جستجو کنید:
http://www.google.com/search?hl=en&q=asp.net+Cookie+Reading+

Javad_Mail
پنج شنبه 25 آبان 1385, 16:18 عصر
دوست من
خوب یکم تلاش می کردی به نتیجه می رسیدی .

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

اما شما می خوای یکبار مقدار دهی بشه .

خوب متغیر رو بیرون از Page_Load تعریف کن بعد داخل Page_Load با دستور زیر

if (Page.IsPostback==false)
{
متغیر رو مقدار دهی کن
}

موفق باشی

Programmer_sa
جمعه 26 آبان 1385, 01:36 صبح
خواهران و براداران عزیز توجه بفرمایید :
من می خوام دستورات داخل ایف فقط یکبار اجرا شوند . به همین منظور ، بیرون ، یک متغیر تعریف کردم که مقدار اولیه آن صفر هست و شرط اجرای دستورات ایف را این قرار دادم که اگر متغیرم مساوی با صفر بود ، اجرا شوند. بعد داخل ایف ، دستورات مورد نظر را نوشتم و در پایان مقدار متغیر را 1 کردم تا دیگه دستورات داخل ایف اجرا نشوند . ولی اجرا می شوند .
بعد اینکه من کوکی موکی سرم نمی شه ، من یه دانشجوی بیچاره ام که یک پروژه با ای . اس . پی دات نت دارم . لطفا راهنمایی .......:خجالت:

mehdi58
جمعه 26 آبان 1385, 20:17 عصر
سلام

خواهران و براداران عزیز توجه بفرمایید :
من می خوام دستورات داخل ایف فقط یکبار اجرا شوند . به همین منظور ، بیرون ، یک متغیر تعریف کردم که مقدار اولیه آن صفر هست و شرط اجرای دستورات ایف را این قرار دادم که اگر متغیرم مساوی با صفر بود ، اجرا شوند. بعد داخل ایف ، دستورات مورد نظر را نوشتم و در پایان مقدار متغیر را 1 کردم تا دیگه دستورات داخل ایف اجرا نشوند . ولی اجرا می شوند .

عزیز دل برادر خوب معلومه که نمی شه چون با هر Postback دوباره مقدار اون متغیر صفر می شه !!!!
راه حلش رو هم دوستان گفتن ....
یکی از راهاش هم استفاده از Viewstate هست .
در رویداد Page_prerender کد زیر رو بنویس:

viewstate("myVS")=a
در داخل برنامه ات هم کد زیر رو بنویس .

a=Ctype(viewstate("myVS"),Integer)
حالا همیشه مقدار اون متغیر رو تا زمانیکه اون صفحه رو ترک نکردی داری .


ضمنا یه دانشجو که پروژه دات نتی داره باید به قول خودت کوکی موکی و .... رو حتما بدونه .
موفق باشین .

Programmer_sa
شنبه 27 آبان 1385, 02:52 صبح
سلام
خیله خب . داداش ، حرف من اینه که این متغیر رو کجا صفر بدم که بخوام داخل ایف یکش کنم و دستور داخل ایف فقط یکبار اجرا بشه . برادر ، اگه ممکنه تو همون مثالی که خودم نوشتم شما اینکارها رو بکنید .
مخلصیم

Programmer_sa
شنبه 27 آبان 1385, 10:05 صبح
می دونستم ، می دونستم ازتون جواب درست و حسابی نمی گیرم. :گریه: :اشتباه:

m_ali_p
شنبه 27 آبان 1385, 10:46 صبح
سلام دانشجو (نه دانشجوی بیچاره)
قبل از برنامه نویسی با Asp.net باید خصوصیات برنامه نویسی تحت وی را بلد باشی وترا از این گزیر و گریزی نیست
اینم جواب : session


public partial class Member : System.Web.UI.Page
{
//int a=0;
protected void Page_Load(object sender, EventArgs e)
{
if(session["a"]==null) session["a"] =0;
if (((int)session["a"])==0)
{
divscript.InnerHtml = "<script>alert('خسته نباشید')</script>";
session["a"]=1;
}
}

}


پایدار باشی

shahroozj
شنبه 27 آبان 1385, 10:52 صبح
دوست عزیز این یک متغیر است که خود dotNet میدونه که کی صفر است و کی یک و احتیاجی به صفر و یک کردن ان ندارید
زمانی که اولین بار صفحه شما اجرا شود این متغیر صفر است و پس از لود شدن 1 میشود و اگر صفحه به سرور ارسال شود ( به هر طریقی به طور مثال با اجرای یک Event) این متغیر 1 باقی میماند و همانطور که دوستان اشاره کردند اگر در PageLoad این متغیر را چک کنید می توانید فقط یک بار تابع مورد نظر را اجرا کنید
به مثال زیر توجه کنید :

If Not IsPostBack Then
Initialize()
End If

در این مثال تابع Initialize فقط یک بار در زمان لود صفحه اجرا میشود