2009-04-08 10 views
1

Ich habe ein Problem mit der Verwendung eines Skripts, das eine NiceEdit-Symbolleiste zu einem Textbereich hinzufügt, wenn dieser Textbereich innerhalb einer Ajax-Registerkarte ist.Wie verweist man auf ein Steuerelement, das in einem Ajax Tab existiert?

Ich möchte wissen, ob ich es auf eine andere Weise als nur die ID beziehen sollte.

Ich meine die ID dieses Textbereichs, ich habe versucht, den Textbereich außerhalb des Tab-Container zu nehmen, es funktioniert, aber wenn ich es zurückgebe, es einfach nicht.

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

Antwort

2

txt ist die Server ID Ihrer Kontrolle, müssen Sie die Client ID verwenden:

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

Grundsätzlich ist die Client-ID von der Server-ID und die Namenscontainer abgeleitet ist wo Ihre Kontrolle ist, um Namenskonflikte zu vermeiden. Wenn sich Ihr Textbereich nicht in der Ajax-Registerkarte befindet, entspricht die Client-ID der Server-ID. Wenn Sie den Textbereich in die Ajax-Registerkarte einfügen, ist die Client-ID anders (Sie können dies überprüfen, indem Sie die Seitenquelle in Ihrem Browser betrachten).


EDIT:

Von Maen

I viewed the page in browser, checked the ID in the page source, it was "TabContainer1$first$txt", used it instead of "txt" and the script was like: panelInstance('<%= txt.TabContainer1$first$txt %> I got an error: BC30456: 'TabContainer1' is not a member of 'System.Web.UI.WebControls.TextBox'.

Das ist nicht das, was ich meinte: Sie haben panelInstance('<%= txt.ClientID %>') in Ihrem Source-Code zu setzen, und asp.net wird konvertieren, das zu panelInstance('TabContainer1$first$txt').

Ich sagte Ihnen, die Seitenquelle im Webbrowser zu überprüfen, nur um zu sehen, dass die Client-ID nicht mehr "txt" war, sondern dass sie aus der Server-ID und dem Benennungscontainer erstellt wurde.

+0

Ich betrachtete die Seite im Browser, überprüfte die ID in der Seitenquelle, es war "TabContainer1 $ first $ txt", verwendete es anstelle von "txt" und das Skript war wie: panelInstance ('<% = txt. TabContainer1 $ erste $ txt%> Ich habe einen Fehler: BC30456: 'TabContainer1' ist kein Mitglied von 'System.Web.UI.WebControls.TextBox'. – Maen

+0

@Maen, siehe meine Bearbeitung – ybo

+0

Sorry, so viel von zu nehmen Deine Zeit, aber entschuldige meine Neuigkeit: P Was soll ich jetzt und in einfachen Worten tun? sollte der Code genau sein: .... panelInstance ('<% = txt.ClientID%>') Wenn ja, habe ich es getan , keine Fehler, aber das Skript funktioniert nicht, der Textbereich "txt" bekommt keine Formatierungsfelder .. !!? – Maen

Verwandte Themen