سؤال

كيفية تجنب تجاوز؟

 public partial class test : System.Web.UI.Page {
    StringBuilder sb = new StringBuilder();

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {
            sb.Append("one");
            lbl.Text = sb.ToString();
        }

    }
    protected void cmdSb_Click(object sender, EventArgs e)
    {


        sb.Append("two");
        lbl.Text = sb.ToString();

    } }
هل كانت مفيدة؟

المحلول

تذكر، في كل مرة تقوم فيها بذلك أي عودة، حتى لو كان فقط للتعامل مع الحدث، ممتلىء سيتم تشغيل دورة حياة الصفحة. للمساعدة في فهم هذا، يمكنك التفكير في التعليمات البرمجية كما لو كانت كلها في وظيفة واحدة كبيرة، أكثر مثل هذا:

public partial class test : System.Web.UI.Page
{
    // Page_Load runs for EVERYTHING
    protected void Page_Load(object sender, EventArgs e)
    {
        // -- Constructor Area
        StringBuilder sb = new StringBuilder();

        // -- Page Init Area

        // -- ViewSate is loaded

        // -- Page Load Area
        if (!IsPostBack)
        {
            sb.Append("one");
            lbl.Text = sb.ToString();
        }

        // -- Validation controls are checked

        // -- If valid, start handling events

        // Handle your click event
        if (cmdSb_Clicked)
        {
            sb.Append("two");
            lbl.Text = sb.ToString();
        }


        // -- DataBinding Area

        // -- Save ViewState           

        // -- Render Page: the class is turned into html that is sent to the browser

        // -- Unload -- Page is disposed

    }
}

بالطبع هذا ليس ما يحدث بالفعل، ولكن يبدأ في التفكير به مثل هذا وأنت على المسار الصحيح. في هذه الحالة، لاحظ أن حدث النقر الخاص بك لن يعمل أبدا في نفس الوقت !IsPostBack الرمز، لكنك تستخدم StringBuilder جديد في كل مرة.

تحقق هنا لمزيد من المعلومات حول دورة حياة الصفحة:
http://msdn.microsoft.com/en-us/library/ms178472.aspx.

نصائح أخرى

ASP.NET هي عديمة الجنسية، مما يعني أن مثيل Stransbuilder الخاص بك لن يستمر من خلال عون البريد إلا إذا قمت بحفظه بشيء مثل Viewstate أو حالة الجلسة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top