C#, FindControl [дубликат]

Вы смотрели на телефон bcmod() ? php имеет проблемы с целыми числами по 2^31 - 1 на платформах на 32 бита.

var_dump(bcmod("$x", '104659') ); // string(4) "2968"

8
задан WEFX 2 November 2011 в 19:22
поделиться

3 ответа

Предоставлено г-ном. Сам Этвуд , вот рекурсивная версия метода. Я бы также порекомендовал протестировать элемент управления на null, и я включил, как вы можете изменить код, чтобы сделать это.

protected void Button1_Click(object sender, EventArgs e)
{
    if (TextBox1.Text != "")
    {
        Label Label1 = FindControlRecursive(Page, "Label1") as Label;
        if(Label1 != null)
            Label1.Text = "<b>The text you entered was: " + TextBox1.Text + ".</b>";
    }
}

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    Label Label1 = FindControlRecursive(Page, "Label1") as Label;
    if (Label1 != null)
        Label1.Text = "<b>You chose <u>" + DropDownList1.SelectedValue + "</u> from the dropdown menu.</b>";
}

private Control FindControlRecursive(Control root, string id)
{
    if (root.ID == id) return root;
    foreach (Control c in root.Controls)
    {
        Control t = FindControlRecursive(c, id);
        if (t != null) return t;
    }
    return null;
}
22
ответ дан 5 December 2019 в 05:56
поделиться

Когда Label1 существует на главной странице:

Как насчет того, чтобы сообщить странице содержимого, где находится ваша главная страница

<%@ MasterType VirtualPath="~/MasterPages/PublicUI.Master" %>

Затем создать метод в мастере, например

public void SetMessage(string message)
{
    Label1.Text = message;
}

И вызвать его в код страницы позади.

Master.SetMessage("<b>You chose <u>" + DropDownList1.SelectedValue + "</u> from the dropdown menu.</b>");

Если Label1 существует на странице содержимого

Если он просто находится на той же странице, просто вызовите Label1.Text = someString; или если вам по какой-то причине необходимо использовать FindControl, измените свой Master.FindControl на FindControl

4
ответ дан 5 December 2019 в 05:56
поделиться

FindControl выполняет поиск только в непосредственных дочерних элементах (технически до следующего NamingContainer ), а не во всем дереве элементов управления. Поскольку Label1 не является непосредственным потомком Master , Master.FindControl не может его найти. Вместо этого вам нужно либо выполнить FindControl в непосредственном родительском элементе управления, либо выполнить рекурсивный поиск элемента управления:

private Control FindControlRecursive(Control ctrl, string id)
{
    if(ctrl.ID == id)
    {
        return ctrl;
    }
    foreach (Control child in ctrl.Controls) 
    { 
        Control t = FindControlRecursive(child, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 
    return null;
}

(обратите внимание, что это удобно как метод расширения ).

.
2
ответ дан 5 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: