【问题标题】:How to refer to a control that exists within an Ajax Tab?如何引用 Ajax 选项卡中存在的控件?
【发布时间】:2010-10-18 06:12:18
【问题描述】:

当文本区域位于 Ajax 选项卡中时,我在使用将 NiceEdit 工具栏添加到文本区域的脚本时遇到问题。

我想知道是否应该以不同于 ID 的方式引用它。

我的意思是那个文本区域的ID,我试图把文本区域放到Tab Container外面,它可以工作,但是当我返回它时,它根本就不行。

<%@ 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>

【问题讨论】:

    标签: vb.net asp.net-ajax formatting


    【解决方案1】:

    txt 是你的控件的server ID,你必须使用client ID:

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

    基本上,客户端 ID 源自服务器 ID 和您的控件所在的命名容器,以避免任何命名冲突。当您的文本区域不在 Ajax 选项卡中时,客户端 ID 与服务器 ID 相同。当您将文本区域放在 Ajax 选项卡中时,它的客户端 ID 是不同的(您可以通过查看浏览器中的页面源来检查)。


    编辑:

    来自梅恩

    我在浏览器中查看了该页面,检查了 页面源中的 ID,它是 “TabContainer1$first$txt”,用过 而不是“txt”,脚本是 比如:panelInstance(' 我得到了 错误:BC30456: 'TabContainer1' 是 不是成员 'System.Web.UI.WebControls.TextBox'。

    这不是我的意思:你必须将panelInstance('&lt;%= txt.ClientID %&gt;') 放在你的源代码中,asp.net 会将其转换panelInstance('TabContainer1$first$txt')

    我告诉你在网络浏览器中检查页面源只是为了看到客户端 ID 不再是“txt”,而是由服务器 ID 和命名容器构成。

    【讨论】:

    • 我在浏览器中查看了页面,检查了页面源中的ID,它是“TabContainer1$first$txt”,使用它而不是“txt”,脚本如下:panelInstance(' 我收到一个错误:BC30456: 'TabContainer1' is not a member of 'System.Web.UI.WebControls.TextBox'。
    • 很抱歉占用了您这么多时间,但请原谅我的新手 :P 我现在应该怎么做?简而言之?代码应该是准确的: ....panelInstance('') 如果是这样,我做到了,没有错误,但脚本仍然无法正常工作,文本区域“txt”没有得到任何格式面板..!!?
    • 您唯一需要做的就是获取您在此处发布的原始代码并将 panelInstance('txt') 替换为 panelInstance('')。如果这不起作用,请在浏览器上查看呈现的页面,并将文本区域的 id 与 javascript 中的 id 进行比较。
    • 现在我明白了,我渲染了它,在页面代码中我发现结果是: ...panelInstance('panelInstance('TabContainer1_first_txt')');虽然文本区域的结果是:
    • 请(1)检查你的源代码,两次“panelInstance”是不正常的,(2)确保你将脚本中的id与id进行比较> 的文本区域,不是它的名字
    猜你喜欢
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多