如何访问类文件中的asp控件

时间:2017-02-12 14:21:24

标签: c# asp.net webforms

我在页面视图中创建了一个面板(tour.aspx文件)。 现在我想在我的类文件(add_tour.cs文件)中访问它。

这是我的小组:

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

这是tour.aspx文件背后的代码:

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

此代码位于add_tour.cs文件中:

public void textbox_generator(int days_count)
{

}

现在如何从aspx文件访问面板? 请帮忙。

2 个答案:

答案 0 :(得分:1)

无需在此类中将文本框实际添加到面板中。

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;
}

然后将您的代码更改为:

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);
}

请注意,在页面生命周期中添加这些控件时需要注意。请参阅Microsoft documentation

这使您的textbox_generator无需了解有关特定网页的任何信息。

另外,您应该将命名约定与C#标准对齐。使用PascalCasing。 textbox_generator应为TextBoxGenerator等。如果不需要访问其类的任何字段或属性,您可以将textbox_generator置为静态方法。

答案 1 :(得分:1)

如果确实希望您的其他类本身直接将控件添加到面板,那么您只需将代码从后面的代码传递给该类。

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);          
    }
}

并从你的代码后面这样调用:

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

这是有效的,因为itinerary_panel实际上是对面板的引用。见Passing Objects By Reference or Value in C#。但是,让方法以这种方式修改状态通常是一个坏主意。