كيفية الوصول إلى عنصر .Net في الصفحة الرئيسية من صفحة المحتوى؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

هل من الممكن الوصول إلى عنصر في الصفحة الرئيسية من الصفحة المحملة داخل ملف ContentPlaceHolder للسيد؟

لدي ListView يسرد أسماء الأشخاص في منطقة التنقل بالصفحة الرئيسية.أرغب في تحديث ListView بعد إضافة شخص إلى الجدول الذي ترتبط به بيانات ListView.ال ListView لا يقوم حاليًا بتحديث قيمه حتى يتم إعادة تحميل ذاكرة التخزين المؤقت.لقد وجدنا أن مجرد إعادة تشغيل ListView.DataBind() سيتم تحديث محتويات عرض القائمة.لم نتمكن من تشغيل ListView.DataBind() على صفحة تستخدم الصفحة الرئيسية.

يوجد أدناه نموذج لما أردت القيام به ولكن حدث خطأ في المترجم

"PeopleListView غير موجود في السياق الحالي"

GIS.master - حيث يوجد ListView

...<asp:ListView ID="PeopleListView"...

GISInput_People.aspx - يستخدم GIS.master كصفحة رئيسية له

GISInput_People.aspx.cs

AddNewPerson()
{
    // Add person to table
    ....

    // Update Person List
    PeopleListView.DataBind();
    ...
}

ما هي أفضل طريقة لحل مشكلة كهذه في C# .Net؟

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

المحلول

واعتقد انكم استطاع قم بذلك عن طريق استخدام this.Master.FindControl أو شيء مشابه، ولكن ربما لا ينبغي عليك ذلك - فهي تتطلب أن تعرف صفحة المحتوى الكثير عن بنية الصفحة الرئيسية.

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

نصائح أخرى

بافتراض أن عنصر التحكم يسمى "PeopleListView" على الصفحة الرئيسية

ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView");
peopleListView.DataSource = [whatever];
peopleListView.DataBind();

لكن @بالمسي هو الأصح، خاصة إذا كان من الممكن أن تحتوي صفحتك على إمكانية وجود أكثر من صفحة رئيسية واحدة.افصلهما واستخدم حدثًا.

الخيار 1: يمكنك إنشاء ملكية عامة للتحكم في صفحتك الرئيسية

public TextBox PropMasterTextBox1
{
    get { return txtMasterBox1; }
    set { txtMasterBox1 = value; }
}

الوصول إليه على صفحة المحتوى مثل

Master.PropMasterTextBox1.Text="SomeString";

الخيار 2:على الصفحة الرئيسية:

public string SetMasterTextBox1Text
{  
    get { return txtMasterBox1.Text; }
    set { txtMasterBox1.Text = value; }
}

في صفحة المحتوى:

Master.SetMasterTextBox1Text="someText";

الخيار 3 :يمكنك إنشاء بعض الطرق العامة التي تناسبك


هذه الطريقة ليست مفيدة جدًا ولكنها مفيدة إذا كنت تريد فقط استخدام بعض عناصر التحكم المحدودة والمحددة مسبقًا

أحد الأشياء التي يجب تذكرها هو توجيه ASP.NET التالي.

<%@ MasterType attribute="value" [attribute="value"...] %>

مرجع MSDN

سيساعدك ذلك عند الرجوع إلى هذا.Master عن طريق إنشاء مرجع مكتوب بقوة إلى الصفحة الرئيسية.يمكنك بعد ذلك الرجوع إلى ListView الخاص بك دون الحاجة إلى CAST.

يمكنك الوصول باستخدام الكود this.Master.FindControl(ControlID) الذي يتحكم فيه.تقوم بإرجاع مرجع عنصر التحكم، بحيث تكون التغييرات فعالة.حول إطلاق حدث لا يمكن أن يكون ممكنا في كل حالة.

بافتراض أن صفحتك الرئيسية تم تسميتها MyMaster:

(Master as MyMaster).PeopleListView.DataBind();

يحرر: نظرًا لأنه سيتم الإعلان عن أن PeopleListView محمي افتراضيًا، فسوف تحتاج إما إلى تغيير هذا إلى عام، أو إنشاء غلاف خاصية عامة بحيث يمكنك الوصول إليه من صفحتك.

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