Как обратиться к элементу управления, который существует во вкладке Ajax? - PullRequest
1 голос
/ 08 апреля 2009

У меня проблема с использованием скрипта, который добавляет панель инструментов NiceEdit в текстовую область, когда эта текстовая область находится на вкладке Ajax.

Я хочу знать, должен ли я ссылаться на него иначе, чем просто на идентификацию.

Я имею в виду идентификатор этой текстовой области, я пытался вывести текстовую область за пределы контейнера вкладок, она работает, но когда я ее возвращаю, просто нет.

<%@ Page Language="VB"  ValidateRequest ="false" AutoEventWireup="false" CodeFile="tabbedNiceEditt.aspx.vb" Inherits="Client_tabbedNiceEditt" %>
<script src="../nicEdit/nicEdit.js" type="text/javascript"></script>

<script type="text/javascript">
bkLib.onDomLoaded(function() {
new nicEditor({buttonList : ['fontSize','fontFamily','fontFormat','bold','italic','underline','strikethrough','forecolor','bgcolor','removeformat'], iconsPath : '../nicEdit/nicEditorIcons.gif'}).panelInstance('txt');
});
</script>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
    <script type="text/javascript">

      function pageLoad() {
      }

    </script>
</head>
<body>
    <form id="form1" runat="server">

    <div>


        <asp:ScriptManager ID="ScriptManager1" runat="server" />
        <cc1:TabContainer ID="TabContainer1" runat="server">
        <cc1:TabPanel ID= "first" runat ="server" >
        <ContentTemplate>
        <b>Stuff Goes HERE</b>
        <br />
        <asp:TextBox ID = "txt" name = "txt" runat ="server" TextMode ="MultiLine" Height = "256" Width = "256">
        </asp:TextBox>
        <br />
        <br />
        <asp:Button id  = "btn" runat ="server" Text = "click" />
        </ContentTemplate>
        </cc1:TabPanel>
        <cc1:TabPanel ID = "second" runat ="server" >
        <ContentTemplate>
        <b>More Stuff for second tab</b>
        </ContentTemplate>
        </cc1:TabPanel>
        </cc1:TabContainer>
    </div>
    </form>
</body>
</html>

1 Ответ

2 голосов
/ 08 апреля 2009

txt - это сервер ID вашего элемента управления, вы должны использовать клиент ID:

....panelInstance('<%= txt.ClientID %>');

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

<Ч />

EDIT:

От Маен

Я просмотрел страницу в браузере, проверил идентификатор в исходной странице, это было "TabContainer1 $ first $ txt", использовал его вместо "txt" и скрипт был как: panelInstance ('<% = txt.TabContainer1 $ first $ txt%> Я получил ошибка: BC30456: «TabContainer1» не является членом 'System.Web.UI.WebControls.TextBox'.

Я не это имел в виду: вы должны поместить panelInstance('<%= txt.ClientID %>') в свой исходный код, и asp.net преобразует в panelInstance('TabContainer1$first$txt').

Я сказал вам проверить источник страницы в веб-браузере, чтобы убедиться, что идентификатор клиента больше не является "txt", а создан из идентификатора сервера и контейнера имен.

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