سؤال

لدي صفحة تحتوي على قائمتين منسقتين على ذلك وزر. جميع عناصر التحكم تجلس في لوحة تحديث. تحتوي القائمة الأولى المنسدلة (DDL1) على الكثير من القيم التي تسببت في عرض عرض ضخم لذلك قمت بتعطيل ViewState عليها. في صفحة OnInit ، قمت بتعبئة القائمة المنسدلة في كل مرة يتم فيها نشر الصفحة مرة أخرى. يبدو أن كل هذا يعمل بشكل جيد ، فهو يعرض جميع القيم ويمكنني الوصول إلى القيمة المحددة في معالج الحدث الخاص بي.

يحتوي DDL1 على سمة AutopoStback التي تم تعيينها على TRUE ، لذا عندما تغير قيمتها ، يتم ملء قائمة المنسدلة الثانية (DDL2) ببعض القيم التي تعتمد على التحديد في DDL1. يعمل هذا أيضًا بشكل جيد ، وتتغير القيم في DDL2 عندما أقوم بتحديد قيمة في DDL1.

DDL2 ليس لديه تعطيل ViewState. يتم تعطيل الزر الذي يجلس ضمن قائمتي المنسدلة بشكل افتراضي ويصبح ممكّنًا عند تغيير قيمة DDL2 إلى أي شيء باستثناء سلسلة. هذا هو المكان الذي أواجه فيه المشاكل. يقوم DDL2 بعمل Autopostback أيضًا ولكن يبدو أنه يفقد الفهرس/القيمة المحددة. عندما أكون في التعليمات البرمجية الخاصة بي للتحقق مما إذا كنت تريد تمكين أو تعطيل الزر يكون الفهرس المحدد دائمًا 0 والقيمة المحددة هي سلسلة.

إذا قمت بتمكين ViewState على DDL1 ، فهذا يعمل بشكل جيد. هل يمكن لأي شخص أن يوجهني إلى ما أفعله خطأ؟

فيما يلي الرمز الذي تم تنفيذه بواسطة Postback DDL2:

protected void AvailableProgramsIndexChanged(object sender, EventArgs e)
{
   ToggleMoreInformationButton();
}

private void ToggleMoreInformationButton()
{
        if (Request.Browser.Type.Contains("IE"))
        {
            ToggleIE();
        }
        else
        {
            ToggleNonIE();
        }
}

private void ToggleIE()
{
        if (this.ddlAvailablePrograms.SelectedValue != string.Empty)
        {
            this.careerInfoLearnMoreSubmit.Enabled = true;
            this.careerInfoLearnMoreSubmit.CssClass = "submit nongreyed";
        }
        else
        {
            this.careerInfoLearnMoreSubmit.Enabled = false;
            this.careerInfoLearnMoreSubmit.CssClass = "submit greyed";
        }
    }

private void ToggleNonIE()
{
        if (this.ddlAvailablePrograms.SelectedValue != string.Empty)
        {
            this.careerInfoLearnMoreSubmit.Enabled = true;
            this.careerInfoLearnMoreSubmit.Style.Remove("opacity");
            this.careerInfoLearnMoreSubmit.Style.Add("opacity", "1.0;");
        }
        else
        {
            this.careerInfoLearnMoreSubmit.Enabled = false;
            this.careerInfoLearnMoreSubmit.Style.Remove("opacity");
            this.careerInfoLearnMoreSubmit.Style.Add("opacity", "0.5;");
        }
 }

لا يعدل الرمز القيمة المحددة لـ DDL2 على الإطلاق.

شكرًا،
B3N

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

المحلول

أظن أن الرمز الذي يعمل أثناء Postback هو إزالة DDL2 لأن القيمة المحددة لا تعود (لأن ViewState خارج). ولكن بدون بعض الكود ، من الصعب حقًا القول بالتأكيد.

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