كيف يمكنني بناء بلدي editform في asp.net حيث هما القوائم المنسدلة بين تعتمد؟

StackOverflow https://stackoverflow.com/questions/1066238

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي مشكلة صغيرة، وأنا على إنشاء صفحة تحرير في تطبيق asp.net بلدي حيث يمكن للمستخدم تحرير خصائص في كائن. لقد اثنين من القوائم المنسدلة (الفئة والمجموعة) حيث كمية الجماعات تعتمد على الفئة المختارة. هدفي هو لعرض الفئة الصحيحة أوغ الكائن الذي يتم تحريره، ثم تحميل قائمة المجموعات وتحديد المجموعة الصحيحة - المشكلة هي أن بلدي الحدث SelectedIndexChanged يتم تشغيل أبدا

وعندما كنت تحميل فئات بلدي في page_load وتجميع فئات رمز يشبه هذا:

protected void Page_Load(object sender, EventArgs e)
    { string editid= Request["edit"] == null ? null : Request["edit"].ToString();
        int id = Convert.ToInt32(editid);
        if (link == null)
        {
            link = BLLink.Load(id, blm);
        }
        if (!IsPostBack)
        {
            group = BLGroup.Load(link.GroupId, blm);
            category = BLCategory.Load(group.CategoryId, blm);

            List<BLCategory> categories = BLCategory.LoadAll();
            categoryDropDown.DataSource = categories;
            categoryDropDown.DataTextField = "CategoryName";
            categoryDropDown.DataValueField = "id";
            categoryDropDown.SelectedValue = category.id.ToString(); //this one doesnt cause the event to fire??? Doesnt matter if it is called after the databind() method
            categoryDropDown.DataBind();
        }

و}

وTheevent معالج أود أن تنفيذ يجب تحميل كافة المجموعات ونشر القائمة المنسدلة واختيار الصحيح واحد:

protected void categoryDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
        category = BLCategory.Load(Convert.ToInt32(categoryDropDown.SelectedValue), new TestModelDataContext());
        if (category != null)
        {
            List<BLGroup> groups = BLGroup.LoadAll(category.id);
            groupDropDown.DataSource = groups;
            groupDropDown.DataTextField = "GroupHeading";
            groupDropDown.DataValueField = "GroupId";
            groupDropDown.DataBind();
            if (group != null)
            {
                groupDropDown.SelectedValue = group.GroupId.ToString();
            }
            else
            {
                groupDropDown.SelectedIndex = 0;
            }
        }
    }

وأنا لا أعرف ما يحدث خطأ، وهذا يبدو وكأنه شيء بسيط القيام به، ما أفعل الخطأ؟

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

المحلول

لحصول هذا الحدث لإطلاق النار، تحتاج إلى الصفحة إعادة النشر عندما تتغير اختيار المستخدم. سيؤدي هذا إلى صفحة كاملة لتحديث (ولكن يجب ضوابط تحتفظ دولتهم).

ويتم تشغيل هذا الحدث SelectedIndexChanged على الخادم وأعتقد أن هناك خاصية في القائمة المنسدلة الأولى حول تقديم / إعادة النشر عندما يتغير العنصر المحدد على ذلك.

لتحصل على سلوك العميل، يمكنك أن تفعل شيئين:
1) التفاف هذا القسم في UpdatePanel ولديهم قائمة الثاني التحديث عندما تتغير قيمة أول واحد
2) تحميل القيم باستخدام شفرة جافا سكريبت العميل الذي وقع عند تغيير القيمة المحددة على أول واحد، باسترداد قائمة ويملأ الثاني
واحد   2A) يمكنك إما كتابة خدمة التي يلتف الدعوة إلى مصدر البيانات وإرجاع القيم كما JSON، وما إلى ذلك، أو   2B) يمكنك ملء كل القيم لكل خيار ممكن في المجالات الخفية التي يتم id'd بطريقة أو بأخرى القيم في المربع الأول (وهذا ليس مرغوبا فيه، ولكن من الممكن اعتمادا على أمن وحجم مجموعات البيانات) .

والخيار 1 هو على الأرجح الطريقة الأكثر مباشرة للاحتفاظ مصدر برنامج القائمة الخاصة بك والحصول على ما زالت السلوك من جانب العميل.

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