الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لدي استفسارين

بدأه الاخير زمانه في 23 يوليو 2010 · 7 رد · 747 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ،

انا جديد على ال asp

اولا

لو كان لدي الكود التالي

 public static int x=0

;
    protected void Page_Load(object sender, EventArgs e)
    {
        x++;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = x.ToString();
    }

لدي متغير تزداد قيمته كلما يتم عمل تحميل للصفحة و عندما اضغط على الزر يتم عرض قيمة المتغيير في label.

الذي لا افهمه في الامر انه عندما اعمل refreash للضفحة ستزداد قيمة المتغيير و يتم عرض القيمة الجديدة على ال label ، كيف يحدث هذا و عملية العرض موجودة داخل الزر وانا بالاساس لم اضغط على الزر؟

===========

شي ثاني

لو كان لدي مثلا الصغحة 1 بها الكود التالي

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    public static Hashtable hash = new Hashtable();

    protected void btnAdd_Click(object sender, EventArgs e)
    {
......
  }
}

معرف متغيير hash ،

كيف من الممكن ان اصل الى هذا المتغيير من الصفحة الثانية؟

في السي شارب كنت اصل عن طريق اسم الكلاس بما انه عرف ك static ، لكن هنا لم ينجح الامر ،

انا اعرف ممكن استخدم ال Session لخزن القيمة ، لكني احاول اجرب هل من الممكن حلها بدون السيشن.

و شكرا

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 23 يوليو 2010 في 14:24

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#2

لا افهم ما يحدث :mad:

بالنسبة للسؤال الاول ،

الان قمت بحذف كلمة static من تعريف المتغيير x ,

وعند التنفيذ تبقى قيمة x هي 1 عند عمل refresh للصفحة وعند الضغط على الزر ، كيف هذا ، حتى لو حذفنا كلمة static اليس المفروض ان قيمة x تزداد عند عمل تحديث للصفحة ويتم عرضها بعد التغيير.

اسف و لكني لسه لم افهم كيف يتم التعامل مع المتغيرات و ارسالها و استلامها من السيرفر.

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#3

طيب اخوي لو سويت تحديث للبرنامج وضغطت على الزر هل تبقى قيمته واحد اما تزود واذا زادت لو فرضنا صارت قيمه اكس اثنين وسويت تحديث هل تعود القيمه واحد ام تبقى اثنين

#4

منطقيا ماراح تتغير لان قيمه اكس اول ماتسوي تحديث لصفحه تصير واحد فا ماراح تزيد

حتي لو ضعطت على الزر اكثر من مره ... لان القيمه ازدادت فقط عند تحميل الصفحة اي يعني داخل حدث البيج لود

والبيج لود مايتنفذ الا مع تحميل الصفحة حتى لو سويت تحديث مره ثانية راح ترجع واحد

انا من راي تستخدم السيشن وهو راح يحل لك المشكلة هذي

جرب الكود هذا راح يحل لك المشكلة ان شالله

int sessionCount;

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["Count"] == null)
        sessionCount = 0;
    else
        sessionCount = Convert.ToInt32(Session["Count"]);
}

protected void btnPost_Click(object sender, EventArgs e)
{
    sessionCount++;
    lblSessionClicks.Text = "You have clicked the button "
                          + sessionCount + " times.";
}

protected void Page_PreRender(object sender, EventArgs e)
{
    Session["Count"] = sessionCount;
}
#5

فعلا اخي السيشن حل المشكلة ، لكني فقط اريد ان افهم مايحدث بالضبط ولهذ استخدمت الطرية التي في الاعلى.

ياريت لو تجرب و تنفذ الكود الي في الاعلى و تخبرني ما الذي يحدث معك.

فانا لا زلت لا افهم مالذي يحدث

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#6

مفهوم التطوير Web Application مختلف عن Desktop Application ، مثلاُ : الصف الخاص بالصقحة يتم إنشاءه و تدميره مباشرة عندما تنتهي عملية الإستدعاء لذلك عند تعريف المتحول x كDataMember يتم إعادة تعريفة وإسناد القيمة له من جديد في الحلة الثاني من سؤالك ، أما عندما يتم تعريفه كـStatic فيتم الحفاظ عليه (مع العلم أنه مشترك لجميع من يزور هذه الصفحة ) حتى يتم إيقاف Application (مثلاُ إيقاف Application Pool في IIS أو إيقاف Visual Studio Testing ) ، كما يجب أن تلاحظ أن الحدث Page Load يتم إستدعائه في كل مرة تحدث فيها عملية PostBack لذلك تزداد قيمة المتحول X في كل مرة في الحالة الآولي....

أنصحك بقراءة طريقة العمل في ASP.Net Web Application في أي كتاب ASP.net حتى تتوضح لك المشكلة ...

بالتوفيق

تم تعديل هذه المشاركة بواسطة م. حسام فيصل في 24 يوليو 2010 في 11:40 — السبب: تصحيح آخطاء و إضافة معلومات

#7

السلام عليكم بالنسبة للسؤال الاول انت عندما عملت تحديث للصفحة وليكن خمس مرات وصارت قيمة المتغير خمسةضغطت الزر فظهر لك المتغير ستة الان عند كل عملية تحديث f5 ستجد ان قيمة المتغيير تزداد وذلك لسبب بسيط ان حدث ضغط الزر يخزن في المستعرض وسوف يعيد ضغط الزر وبالتالي فانه سيكمل عند كل عمل تحديث بالتكرار عادة لمنع حدوث مثل هذا الشيىء اي ان يخزن الحدث بالمستعرض يعمل اما توجيه بعد الكود الذي تنفذه

Response.Redirect("url");

او حل اخر ان تمنع تحديث الصفحة وتستخدمك الاي جاكس

لكي يتم الفهم بشكل صحيح ضع زرين

ونفذ بحدث الاول اعادة توجيه وفي الثاني بدون توجيه

	public static int x = 0; 
	protected void Page_Load(object sender, EventArgs e)
	{
    	x++;
	}
	protected void Button1_Click(object sender, EventArgs e)
	{
    	Label1.Text = x.ToString();
    	Response.Redirect("Default4.aspx");
	}
	protected void Button2_Click(object sender, EventArgs e)
	{
    	Label1.Text = x.ToString();
	}

اما عن سؤالك الثاني رايي ان تخزن كل ما تحتاجه بال appcode اي لتطبيق مبدا فصل الطبقات فهول اسهل عليك مستقبلا

بالتوفيق وجزاكم الله كل خير

In bad state

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…