2017-02-12 3 views
1

Ich habe ein Panel in meiner Seitenansicht erstellt (tour.aspx-Datei). Jetzt möchte ich darauf in meiner Klassendatei (Datei add_tour.cs) zugreifen.So greifen Sie auf ASP-Steuerelemente in einer Klassendatei zu

Das ist mein Panel:

<asp:Panel ID="itinerary_panel" runat="server"></asp:Panel> 

Dies ist mein Code hinter tour.aspx Datei:

add_tour tour_obj = new add_tour(); 
int days_count = 2; 
tour_obj.textbox_generator(days_count); 

Und dieser Code ist in add_tour.cs Datei:

public void textbox_generator(int days_count) 
{ 

} 

Nun, wie man Zugang das Panel von Aspx-Datei? Bitte helfen.

+0

Ihre Klasse sollte die Bedienelemente nicht berühren. Der Code dahinter sollte mit dem Erfassen von Werten und deren Übergabe an andere Klassen umgehen. – mason

+0

was soll ich dann tun? –

+0

Was meinst du? Ich habe dir gerade gesagt, was zu tun ist. – mason

Antwort

1

Es ist nicht notwendig, die Textfelder aus dieser Klasse zum Panel hinzuzufügen.

public List<TextBox> textbox_generator(int days_count) 
{ 
    var textBoxes = new List<TextBox>(); 

    for(int i = 0; i < days_count; i++) 
    { 
     txt_desc = new TextBox(); 
     txt_desc.ID = "txt_desc" + i.ToString(); 
     txt_desc.CssClass = "form-control"; 
     txt_desc.Attributes.Add("placeholder", "Enter day " + i + " description"); 
     txt_desc.TextMode = TextBoxMode.MultiLine; 
     textBoxes.Add(txt_desc);   
    } 

    return textBoxes; 
} 

Dann Code ändern zurück:

add_tour tour_obj = new add_tour(); 
int days_count = 2; 
var textBoxes = tour_obj.textbox_generator(days_count); 
foreach(var textBox in textBoxes) 
{ 
    itinerary_panel.Controls.Add(textBox); 
} 

Beachten Sie, dass Sie müssen vorsichtig sein, wo Sie diese Steuerelemente in der Seite Lebenszyklus hinzufügen. Siehe .

Das hält Ihre textbox_generator davon ab, irgendetwas über die spezifische Seite zu wissen, die es verwendet.

Auch sollten Sie Ihre Namenskonventionen wirklich mit C# Standards ausrichten. Verwenden Sie PascalCasing. textbox_generator sollte TextBoxGenerator etc. sein. Und Sie können wahrscheinlich textbox_generator in eine statische Methode machen, wenn es nicht auf Felder oder Eigenschaften seiner Klasse zugreifen muss.

+0

Danke @mason –

+0

Danke allot. Es funktioniert ... :) –

1

Wenn Sie wirklich wollten Ihre andere Klasse zu sich selbst die Steuerelemente direkt an das Panel hinzufügen, dann würden Sie einfach einen Verweis auf das Panel aus dem Code hinter der Klasse übergeben.

public void textbox_generator(int days_count, Panel panel) 
{ 
    for(int i = 0; i < days_count; i++) 
    { 
     txt_desc = new TextBox(); 
     txt_desc.ID = "txt_desc" + i.ToString(); 
     txt_desc.CssClass = "form-control"; 
     txt_desc.Attributes.Add("placeholder", "Enter day " + i + " description"); 
     txt_desc.TextMode = TextBoxMode.MultiLine; 
     panel.Controls.Add(txt_desc);   
    } 
} 

und diese aus dem Code auf diese Weise rufen hinter:

add_tour tour_obj = new add_tour(); 
int days_count = 2; 
var textBoxes = tour_obj.textbox_generator(days_count, itinerary_panel); 

Dies funktioniert, weil itinerary_panel tatsächlich ein Verweis auf die Platte ist. Siehe Passing Objects By Reference or Value in C#. Es ist jedoch oft eine schlechte Idee, dass eine Methode den Zustand auf diese Weise ändert.

+0

ja es funktioniert ... und wenn ich den Wert von all diesen Textboxen bekommen soll, was soll ich dann verwenden? Ajax oder Page_PreInit? –

+0

Kann ich fragen, warum Sie Webformulare und nicht MVC verwenden? – mason

+0

weil dies eine kleine Skala der Website-Anwendung ist, mache ich es mit der Verwendung von Web-Formularen ... es gibt nur einige dynamische Seiten. –

Verwandte Themen