اذهب إلى المحتوى

السؤال

نشر

السلام عليكم 
لدي زر ومتغير Variable وأريد جعل الزر يزيد قيمة المتغير بمقدار 1 في كل مرة يم الضغط عليه
أعتقد أن الأمر قد يكون سهل لكن لدي مشكلة حيث أن الزر يقوم بزيادة قيمة المتغير مرة واحدة فقط
هذا هو الكود الذي استخدمته

int posts_num = 1;
protected void loadMore_btn_ServerClick(object sender, EventArgs e)
{
   posts_num ++;
   counter_lbl.Text = posts_num.ToString();
}

لكن الزر يعمل لمرة واحدة فقط أي يعرض 2 ثم يتوقف ولا يزيد عن ذلك كما هو المتوقع

هل من إقتراحات؟

Recommended Posts

  • 2
نشر (معدل)

إذًا أنت تعمل على ASP.NET Web Forms علمت ذلك لأنّك أخبرتني أنّك تستخدم UpdatePanel. على العموم المشكلة في ذلك أنّ تطبيقات الويب عمومًا لا تحافظ على الحالة الحاليّة لها Stateless. فأي متغيّر تعدّل قيمته عند طلب Request معيّن، سيزول تأثير هذا التعديل عندما تنتهي معالجة الطلب. وهكذا فالعدد الثابت الذي يعرضه برنامجك (القيمة 2) منطقية تمامًا.

احدى الحلول المتاحة لهذه المشكلة تكمن في استخدام طريقة تحافظ فيها على حالة التطبيق بين الطلبات المتتالية (قيمة المتغيّر posts_num على وجه التحديد). الطريقة التي اخترتها لك هي استخدام الخاصيّة Session من الصنف Page والتي تحافظ على قيمة المتغيّر posts_num. انظر إلى التعديل التالي الذي يجب أن تنجزه على شيفرتك:

protected void loadMore_btn_ServerClick(object sender, EventArgs e)
{
    int posts_num;

    if (Session["CurrentPostValue"] == null)
    {
        posts_num = 1;
    }
    else
    {
        posts_num = (int)Session["CurrentPostValue"];
    }

    counter_lbl.Text = posts_num.ToString();

    posts_num++;
    Session["CurrentPostValue"] = posts_num;
}

لاحظ أنّ المتغيّر posts_num أصبح محليًّا local variable ولم يعد موجودًا على مستوى الصنف.

تم التعديل في بواسطة حسام برهان
  • 0
نشر (معدل)
بتاريخ 9 دقائق مضت قال حسام برهان:

انسخ كامل الملف الذي يحوي هذه الشيفرة، واعرضه من فضلك.

الملف كبير يمكنني أن أعرض على حضرتك الجزء الخاص بهذا الزر بالإضافة إلى Class الصفحة أو إذا كنت متأكدا يمكن أن أعرض الملف الكامل لكنه كبير
*ملحوظة أيضا الزر وال label موجودان داخل updatepanel

كود الجزء الخاص بالزر
 

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

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

    int posts_num = 1;
    protected void loadMore_btn_ServerClick(object sender, EventArgs e)
    {
        posts_num ++;

        counter_lbl.Text = posts_num.ToString();
    }
}

إذا ما كان الكود الكامل للصفحة مازال ضروريا فقط أخبرني بذلك 

تم التعديل في بواسطة zezo mohamed

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...