Jak získat přístup k NET prvek na mistra stránku z obsahové stránky?

hlasů
11

Je možné přistupovat prvek na straně hlavního ze stránky vloženého rámci ContentPlaceHolderpro mistra?

Mám ListView, která uvádí jména osob v navigační oblasti na straně mistra. Rád bych aktualizovat ListView poté, co osoba byla na stole, že ListView je vázán dat na přidán. ListViewSoučasnosti neaktualizuje to hodnoty, dokud se znovu načte z paměti cache. Zjistili jsme, že právě znovu spuštěn ListView.DataBind()bude aktualizovat obsah ListView je. Nebyli jsme schopni spustit ListView.DataBind()na stránku, která používá stránky mistra.

Níže je ukázka toho, co jsem chtěl dělat, ale chyba kompilátoru říká

„PeopleListView neexistuje v současném kontextu“

GIS.master - Kde ListView bydliště

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

GISInput_People.aspx - Používá GIS.master, jak je to vzorová stránka

GISInput_People.aspx.cs

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

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

Jaký by byl nejlepší způsob, jak vyřešit problém, jako je to v C # .NET?

Položena 08/08/2008 v 22:39
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
17

Věřím, že by to udělat pomocí this.Master.FindControl nebo něco podobného, ale asi neměl - to vyžaduje, aby obsah stránky vědět příliš mnoho o struktuře vzorové stránce.

Já bych navrhnout jiný způsob, jako je vypalování událost v oblasti obsahu, že velitel mohl naslouchat a re-bind při výstřelu.

Odpovězeno 08/08/2008 v 22:46
zdroj uživatelem

hlasů
4

Za předpokladu, že je ovládací prvek s názvem „PeopleListView“ na hlavní stránce

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

Ale @ palmsey je správnější, a to zejména pokud vaše stránky by mohly mít možnost více než jednu stránku předlohy. Oddělit je a používat události.

Odpovězeno 08/08/2008 v 22:48
zdroj uživatelem

hlasů
2

Varianta 1: můžete vytvořit veřejný majetek své kontroly vzorové stránky

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

Přístup je na stránce s obsahem, jako je

Master.PropMasterTextBox1.Text="SomeString";

Možnost 2: na vzorové stránce:

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

na obsah Strana:

Master.SetMasterTextBox1Text="someText";

Možnost 3: můžete vytvořit nějakou veřejnou metodu, která pracuje pro vás


tato metoda není tak užitečná, ale prostě chtějí používat určité omezené a předdefinované kontrolu, pokud to pomůže

Odpovězeno 08/06/2012 v 09:43
zdroj uživatelem

hlasů
1

Jeden myslet na paměti, je následující direktiva ASP.NET.

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

Referenční MSDN

To vám pomůže při odkazování this.Master vytvořením silně zadaný odkaz na stránku předlohy. Pak můžete uvést své ListView, aniž byste museli CAST.

Odpovězeno 23/08/2008 v 03:33
zdroj uživatelem

hlasů
0

můžete přistupovat s kódem this.Master.FindControl (CONTROL ID), které kontrolují si budete přát. Vrací odkaz na ovládací prvek, takže změny jsou účinné. o vypálení události by nebylo možné každé situace.

Odpovězeno 08/04/2011 v 08:08
zdroj uživatelem

hlasů
-1

Za předpokladu, že váš pán Stránka byla pojmenována MyMaster:

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

Edit: Od PeopleListView budou prohlášeny za chráněné standardně, budete buď muset změnit na veřejnosti, nebo vytvoření veřejného majetku obal tak, aby jej bylo možné přistupovat z vaší stránky.

Odpovězeno 08/08/2008 v 22:44
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more