Cara akses .Net elemen pada halaman Master dari halaman Konten?

Adalah mungkin untuk mengakses sebuah elemen pada halaman Master dari halaman yang dimuat dalam ContentPlaceHolder untuk master?

Saya memiliki sebuah ListView yang berisi daftar orang-orang's nama-nama dalam area navigasi pada halaman Master. Saya ingin update ListView setelah seseorang telah ditambahkan ke tabel yang ListView adalah data yang pasti. The ListView saat ini saya tidak update's nilai-nilai sampai cache reloaded. Kami telah menemukan bahwa hanya kembali menjalankan ListView.DataBind() akan update listview's isi. Kita belum mampu untuk menjalankan ListView.DataBind() pada halaman yang menggunakan halaman Master.

Di bawah ini adalah contoh dari apa yang ingin saya lakukan tapi kesalahan kompilator kata

"PeopleListView tidak ada dalam konteks saat ini"

SIG.guru - di Mana berada ListView

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

GISInput_People.aspx - Menggunakan GIS.guru sebagai it's master page

GISInput_People.aspx.cs

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

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

Apa yang akan menjadi cara terbaik untuk mengatasi masalah seperti ini di C# .Net?

Larutan

Saya percaya anda bisa melakukan ini dengan menggunakan ini.Master.FindControl atau sesuatu yang mirip, tetapi anda mungkin tidak't - membutuhkan konten halaman untuk tahu terlalu banyak tentang struktur halaman master.

Saya akan menyarankan metode lain, seperti menembakkan sebuah acara di area konten yang master bisa mendengarkan dan kembali mengikat ketika dipecat.

Komentar (0)

Dengan asumsi kontrol yang disebut "PeopleListView" di halaman master

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

Tapi @palmsey adalah lebih benar, terutama jika halaman anda bisa memiliki kemungkinan lebih dari satu halaman master. Memisahkan mereka dan menggunakan sebuah acara.

Komentar (0)

Opsi 1 :anda dapat membuat publik milik anda halaman master control

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

akses pada konten halaman seperti

Master.PropMasterTextBox1.Text="SomeString";

Opsi 2: pada Master page:

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

pada Halaman Konten:

Master.SetMasterTextBox1Text="someText";

pilihan 3 : anda dapat membuat beberapa umum metode yang bekerja untuk anda


ini pendekatan ini tidak begitu berguna tetapi hal ini membantu jika anda hanya ingin menggunakan beberapa terbatas dan kontrol yang telah ditetapkan

Komentar (3)

Satu berpikir untuk diingat adalah sebagai berikut ASP.NET direktif.

BACA Referensi

Ini akan membantu anda ketika referensi ini.Guru dengan menciptakan strongly typed referensi untuk halaman master. Anda kemudian dapat referensi anda ListView tanpa perlu COR.

Komentar (0)

anda dapat mengakses dengan kode ini.Master.FindControl(ControlID) yang mengendalikan anda inginkan. Mengembalikan referensi dari kontrol, sehingga perubahan yang efektif. tentang menembakkan sebuah acara yang tidak bisa mungkin setiap situasi.

Komentar (0)

Dengan asumsi anda master page bernama MyMaster:

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

Edit: sejak PeopleListView akan dinyatakan dilindungi secara default, anda akan perlu untuk mengubah ini ke publik, atau membuat fasilitas umum wrapper sehingga anda dapat mengaksesnya dari halaman anda.

Komentar (0)