ASP.NET доступ к несерверным элементам управления внутри Panel - PullRequest
3 голосов
/ 15 февраля 2011

У меня есть пользовательский элемент управления, который наследуется от Panel. Во время загрузки я хочу получить доступ ко всем элементам управления внутри этой панели, включая несерверные элементы управления, для управления атрибутами. Свойство Controls панели дает мне серверные элементы управления, но не несерверные. Есть ли способ получить к ним доступ?

Например:

<cc:MyPanel runat="server">
    <asp:TextBox id="txt1" runat="server" />
    <input type="text" id="txt2" />
</cc:MyPanel>

Во время события Load (или любого другого события перед отображением элемента управления) я хочу манипулировать обоими текстовыми полями.

Спасибо

Ответы [ 2 ]

4 голосов
/ 15 февраля 2011

Вам нужно было бы либо добавить runat='server' к каждому тегу, либо сделать несколько JavaScript, чтобы справиться с этим.Событие load рассматривает серверные элементы управления.

Измените свой элемент управления на:

<input id="txt2" runat="server" type="text" />

Тогда вы можете сделать:

string s = txt2.Text;

Единственный другой способ, которым я могу думатьЕсли вы хотите использовать форму для публикации значений, а затем использовать Request. для доступа к каждой публикуемой переменной.Но я думаю, что вы ищете скорее первое, а не второе.

Наконец, если вы пойдете по пути JS, вот хорошая статья из MSDN, показывающая, как это сделать: http://msdn.microsoft.com/en-us/library/3hc29e2a.aspx

0 голосов
/ 15 февраля 2011

Я бы порекомендовал метод RegisterStartupScript. Я выполнил быстрый тестовый проект, и, хотя я не знаю специфики вашего проекта, в моем тесте успешно получен доступ к комбинации элементов управления на стороне клиента и на стороне сервера внутри панели.

<asp:Panel ID="customPanel1" runat="server">
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />
    <input type="text" id="clientSideInput1" /><br />
    <input type="text" id="clientSideInput2" /><br />
</asp:Panel> 

protected void Page_Load(object sender, EventArgs e)
{
    var controls = customPanel1.Controls;
    foreach(Control c in controls)
    {
        if (c.GetType() == typeof(TextBox))
            ((TextBox)c).Text = "It worked!";
    }
    if (!Page.ClientScript.IsClientScriptBlockRegistered(GetType(), "PageScripts"))
    {
        var jscript = "document.getElementById('clientSideInput1').style.background=\"Red\";";
        jscript += "document.getElementById('clientSideInput2').style.background=\"Yellow\";";
        Page.ClientScript.RegisterStartupScript(GetType(), "PageScripts", jscript, true);
    }
}

Производит это для меня ...

enter image description here

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...