Frage

Ich habe die Website gesucht und ich kann keine Lösung für mein Problem, so Entschuldigungen finden, wenn es bereits beantwortet (ich bin sicher, dass jemand muss diese vor gefragt hat).

Ich habe ein jQuery Popup-Fenster geschrieben, dass ich als WebControl und IScriptControl verpackt werden. Der letzte Schritt ist, um der Lage sein, das Markup innerhalb der Tags meiner Kontrolle zu schreiben. Ich habe das InnerProperty Attribut ein paar Mal verwendet, aber nur für die Listen der stark typisierte Klassen einschließlich.

Hier ist mein Eigentum auf dem WebControl:

[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public something??? Content
{
   get
   {
      if (_content == null)
      {
         _content = new something???();
      }
      return _content;
   }
}
private something??? _content;

Hier ist der HTML-Markup von dem, was ich bin nach:

   <ctr:WebPopup runat="server" ID="win_Test" Hidden="false" Width="100px" Height="100px"
      Modal="true" WindowCaption="Test Window" CssClass="window">
      <Content>
         <div style="display:none;">
            <asp:Button runat="server" ID="Button1" OnClick="Button1_Click" />
         </div>
         <%--Etc--%>
         <%--Etc--%>
      </Content>
   </ctr:WebPopup>

Leider weiß ich nicht, was meine Content-Eigenschaft geben soll. Ich brauche im Grunde die UpdatePanel des ContentTemplate zu replizieren.

Bearbeiten : So folgende ermöglicht ein Template Container automatisch erstellt werden, aber keine Kontrollen zeigen, was los ist mit dem, was ich tue

[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate Content
{
    get
    {
        return _content;
    }
    set
    {
        _content = value;
    }
}
private ITemplate _content;

EDIT2 : der Create Aufschalten ermöglicht die Kontrollen innerhalb des ITemplate gerendert werden:

protected override void CreateChildControls()
{
   if (this.Content != null)
   {
      this.Controls.Clear();
      this.Content.InstantiateIn(this);
   }
   base.CreateChildControls();
}

Leider kann ich nicht zugreifen jetzt die Kontrollen innerhalb des ITemplate von der Code-Behind-Datei auf der Datei. D. h wenn ich einen Knopf in meiner Marke setzen, wie so:

<ctr:WebPopup runat="server" ID="win_StatusFilter">
   <Content>
      <asp:Button runat="server" ID="btn_Test" Text="Cannot access this from code behind?" />
   </Content>
</ctr:WebPopup>

Ich kann dann keinen Zugriff btn_Test aus dem Code hinter:

protected void Page_Load(object sender, EventArgs e)
{
   btn_Test.Text = "btn_Test is not present in Intellisense and 
      is not accessible to the page. It does, however, render correctly.";
}

EDIT3 : FIXED! Edit 2 ist die korrekte soluion. Es war nur von Visual Studios 2010 ein Schmerz in den Hintern zu sein. Geschlossen die App und wieder geöffnet es und alle meine Kontrollen innerhalb der Content-Eigenschaft waren auf der Seite zugänglich.

Edit4 : Edit 2 das Problem nicht beheben. Ich hatte schon das [TemplateInstance(TemplateInstance.Single)] Attribut versucht, bevor jemand erwähnt hatte, aber zu der Zeit habe ich nicht denke, dass es einen Unterschied gemacht hätte. Es scheint von Visual Studio 2010 ist einfach seltsam heute zu sein.

Da ich den Tag entfernt und es erfolgte auf Arbeit, nahm ich das Attribut einen Unterschied nicht gemacht hatte. Da AGAIN haben sich die Kontrollen auf den Code zurück nicht mehr verfügbar. Hinzufügen des Attributs zurück in erlaubt es alle an die Arbeit und für die Kontrollen zugänglich Server-Seite zu sein. MADNESS . Ich werde Brian Antwort zu akzeptieren, wie er das Update, bevor jemand anderes erwähnt wird.

War es hilfreich?

Lösung

public ITemplate Inhalt

, die Sie dann auf die Benutzeroberfläche machen wie:

Label label = new Label();
this.Content.InstantiateIn(label);

//Render label

EDIT: Sicherstellen, dass die Vorlage auch definiert

[TemplateInstance(TemplateInstance.Single)]

, da dies ermöglicht es Ihnen, die Steuerelemente in der Vorlage direkt zugreifen zu können.

Andere Tipps

Sie sollten versuchen, diese zu nutzen:

win_StatusFilter.FindControl("btn_Test") // this will be a Control
win_StatusFilter.FindControl("btn_Test") as Button // this will be a Button if control found, otherwise it will be null.

Ansonsten sollten Sie einige Eigenschaften für das Steuerelement, wie in diesem Artikel definieren: http://msdn.microsoft.com/ ru-ru / library / 36574bf6% 28v = VS.90% 29.aspx


Update: Nach den Ausführungen in diesem Artikel über Content Eigenschaft des Update:

http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.contenttemplate(v=VS.90).aspx

Sie können Kontrollen von Content bekommen wegen TemplateInstanceAttribute Wert (UpdatePanel.ContentTemplate hat die TemplateInstance.Single).

So sollten Sie nur diesen Code verwenden:

[PersistenceMode(PersistenceMode.InnerProperty)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
[TemplateInstance(TemplateInstance.Single)]
public ITemplate Content

Weitere Informationen unter:

http: //msdn.microsoft.com/ru-ru/library/system.web.ui.templateinstanceattribute(v=VS.90).aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top