Я создал TabPanel в моем aspx-файле. В моем коде позади я динамически создаю: вкладки внутри него, а также HtmlEditor в каждой вкладке. Я также создаю слушателя на каждой вкладке, так что, когда они активируются или отображаются, HtmlEditor на этой вкладке получает фокус.Ext.NET (Coolite) Динамически созданный прослушиватель Tabs в Tabpanel не находит идентификатор HTMLEditor (объект не определен)
Когда я запускаю программу, я вижу, что вкладка была создана на моей TabPanel. Но перед тем, как веб-страница будет готова к использованию, возникает ошибка, заявляющая, что идентификаторы объектов в слушателях не определены. Таким образом, слушатель не работает, и страница не загружается полностью.
Незначительная часть состоит в том, что если я добавлю непосредственно в мой aspx-файл, вкладку в моей панели вкладок и загружу оставшуюся часть динамической вкладки с помощью прослушивателей: все идентификаторы редакторов html распознаются, и все слушатели прекрасно работают. За исключением первой вкладки, у которой нет слушателя и не было создано динамически в этом случае.
Моя теория заключается в том, что вкладка индекса 0 TabPanel, по-видимому, является слушателем функций Activate() или Show(), прежде чем идентификатор элемента управления HtmlEditor будет сохранен на странице.
Так что мне интересно, что я пропустил, и как я могу поместить слушателей (активировать или показать) каждой вкладке в Tabpanel, которая вызовет метод фокусировки элемента управления внутри этой вкладки. И, конечно, я хочу динамически генерировать все мои вкладки.
Вы можете мне помочь?
Надеюсь, я был достаточно ясен.
Вот мой Default.aspx страница:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<script runat="server"> </script>
<!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>Page sans titre</title>
</head>
<body runat="server">
<ext:ScriptManager ID="CooliteScriptManager" runat="server" QuickTips="true" ScriptAdapter="Ext">
</ext:ScriptManager>
<form id="form" runat = "server">
<ext:Panel ID="PnFiche" runat="server" Border="false" Header="false" Frame="false"
AutoScroll="true" BodyStyle="padding: 10px; text-align: left;">
<Body>
<ext:FormLayout ID="FormLayout1" runat="server" LabelWidth="150">
<ext:Anchor runat="server">
<ext:MultiField runat="server" FieldLabel="Indications/but de l'analyse" >
<Fields>
<ext:FormPanel runat="server" Title="Indications/but de l'analyse" Width="1000" Collapsible="true">
<Body>
<ext:TabPanel ID="TpIndications" runat="server" Width="1000" Height="250" EnableTabScroll="true">
</ext:TabPanel>
</Body>
</ext:FormPanel>
</Fields>
</ext:MultiField>
</ext:Anchor>
</ext:FormLayout>
</Body>
</ext:Panel>
</form>
</body>
</html>
Вот мой Default.aspx.cs страница:
using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Coolite.Ext.Web;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GenerateObjectTabPanel(TpIndications, "French", "Indication", null);
GenerateObjectTabPanel(TpIndications, "English", "Indication", null);
}
private void GenerateObjectTabPanel(TabPanel theTabPanel, String theLanguage, String suffixeID, String TextToReplace)
{
HtmlEditor TheHtmlEditor = new HtmlEditor();
TheHtmlEditor.ID = "Editeur_HTML_" + suffixeID + "_" + theLanguage;
TheHtmlEditor.Height = 250;
TheHtmlEditor.Width = 1000;
if (!string.IsNullOrEmpty(TextToReplace))
{
TheHtmlEditor.Text = TextToReplace;
}
Tab TheTab = new Tab("Tab_" + suffixeID + "_" + theLanguage, theLanguage);
TheTab.BodyControls.Add(TheHtmlEditor);
TheTab.Listeners.Activate.Handler = "#{" + TheHtmlEditor.ID + "}.focus();";
theTabPanel.Tabs.Add(TheTab);
}
}
Попробуйте изменить default.aspx с одной вкладки уже и слушатель работает нормально (но, конечно, я не хочу этого, так как хочу, чтобы все мои вкладки были динамически загружены):
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<script runat="server"> </script>
<!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>Page sans titre</title>
</head>
<body runat="server">
<ext:ScriptManager ID="CooliteScriptManager" runat="server" QuickTips="true" ScriptAdapter="Ext">
</ext:ScriptManager>
<form id="form" runat = "server">
<ext:Panel ID="PnFiche" runat="server" Border="false" Header="false" Frame="false"
AutoScroll="true" BodyStyle="padding: 10px; text-align: left;">
<Body>
<ext:FormLayout ID="FormLayout1" runat="server" LabelWidth="150">
<ext:Anchor runat="server">
<ext:MultiField runat="server" FieldLabel="Indications/but de l'analyse" >
<Fields>
<ext:FormPanel runat="server" Title="Indications/but de l'analyse" Width="1000" Collapsible="true">
<Body>
<ext:TabPanel ID="TpIndications" runat="server" Width="1000" Height="250" EnableTabScroll="true">
<Tabs>
<ext:Tab ID="TI_fr_CA" runat="server" Height="250" Width="1000" Title="test">
<Body>
<ext:HtmlEditor ID="EI_fr_CA" runat="server" Height="250" Width="1000" Visible="true">
</ext:HtmlEditor>
</Body>
</ext:Tab>
</Tabs>
</ext:TabPanel>
</Body>
</ext:FormPanel>
</Fields>
</ext:MultiField>
</ext:Anchor>
</ext:FormLayout>
</Body>
</ext:Panel>
</form>
</body>
</html>