Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von TiltonJH
Thema: [gelöst] [Web User Control] dynamische controls werden doppelt angezeigt
Am im Forum: Web-Technologien

Stimmt nicht ganz :-).

Erstelle dynamisch die gleichen Controls mit (WICHTIG) den selben IDs in Page_Load aber ohne Daten. Nach Page_Load werden die die Daten aus dem ViewState (im falle eines Postbacks) wieder den entspechenden Controls zu gewiesen.

So muss man die Controls nur einmal befüllen.

Tilton

Thema: zu angelkicken TreeNode scrollen
Am im Forum: Web-Technologien

Hallo,

sorry, ich muss den Thread noch mal raus holen.

Ich würde gerne auch eine solche Funktionalität einbauen. Soweit auch alles kein Prob.

Nur wo bzw. wie muss ich denn dann die Java-Script Funktion aufrufen?

MfG

Tilton

PS: Meine Java-Script Kenntnisse sind nicht so dolle.

Thema: Postback bei klick auf einzelne Zelle
Am im Forum: Web-Technologien

Zitat von Abt
Mit jQuery kannst Du allem einen Event hinzufügen, auch einer Zelle.

Wie funzt das im Detail? Ich meine wie bekommt die currentCell ("var currentCell = $(this);")? Oder anders: wie kann man dann hinterher die Celle von einer andern unterscheiden, wenn ein td-Tag kein id-Attribut hat?

MfG

Tilton

Thema: web.config auslesen in VS2010
Am im Forum: Web-Technologien

Hallo,

die Erlösung findest du im Namespace "System.Configuration". Und der MSDN :rtfm:. =)


MfG

TiltonJH

EDIT bzw: "System.Web.Configuration" & "System.Net.Configuration"

Thema: Postback bei klick auf einzelne Zelle
Am im Forum: Web-Technologien

Hallo,

na anders wird es nicht werden. Du wirst um einen Postback auszlösen einen Button, einen ImageButton oder Link nehmen müssen.

einer Celle (<td></td>) kann man diese Funktionalität nicht mit geben.

Oder eben per JavaScript und OnMouseClick o.ä. wobei man das auch wieder keiner Celle zu weisen kann (soweit ich weis).

Ergo: zb einen Link jede Celle, und in den Link den egl. Cellen-Inhalt.

Thema: Verhindern von HtmlJnjection per HtmlEncode inkl. UTF8
Am im Forum: Web-Technologien

Hallo Abt,

hättes du meinen und den post von Grumbler85 richtig gelesen, wäre dir aufgefallen das wir das Wort "AUFhalten" benutzt haben und nicht "ABhalten" ergo, kann überhaupt nicht einschätzen in wie weit ich kritikfähig bin oder eben nicht.

Damits deutlicher wird:

Nein, ich lasse mich natürlich nicht von der Tatsache aufhalten, dass HtmlEncode ä, ö, ü usw encodiert. Nur finde ich es nicht sonderlich clever, wenn das dann gerenderte HTML-Dokument eh UTF8 kodiert ist. ä, ö, ü usw sind Bestandteil von UTF8 und müssten somit nicht (zb. "ä" == "ä") kodiert werden. Spinnt man dies Szenario weiter, würden (ich habs noch nicht probiert) auch kyrillische oder chinesische Schriftzeichen so umkodiert werden. Und somit wäre die generelle Codierung auf UTF8 eigentlich zwecklos.

ToolTips & HtmlEncode

Im vorliegendem Beispiel sieht es folgendermaßen aus:
Doch auch in ToolTip werden Kodierte Umlaute vom Browser richtig dargestellt. Aber es ist zu beachten um welches Control und welche Eigenschaft es ich handelt, weil es sonst zu einer Doppelten Encodierung kommen kann, welche den Eindruck von nicht korrekter Interpretation erweckt: Bsp: "ä" -1. Encodierung-> "ä" -2. Encodierung-> "&amp;#228;" lesen kann man dann "ä" anstelle von dem erwartetem "ä", ist aber auch nicht anders zu erwarten.

HtmlEncode & Unicode
Ja, natürtlich gibt HtmlEncode Unicode zurück. Ein System.String Objekt ist immer Unicode, dass sagt aber doch nur wie die binäre Repräsentation eines Char Objektes ist und nicht welche Chars enthalten sind.
Das einzige wo das mal eine Rolle spielt ist für den HtmlWriter, welcher die Seite rendert. Denn der muss jetzt aus dem allgemeinen Unicode, UTF8 machen. (Wobei UTF8 ist eine Form von Unicode ist aber eben nicht die, die von System.String Objekten genutzt wird.)


Was sollte das HtmlEncode nun eigentlich nur machen?
Alle Zeichen eines Stings in eine HTML -"Escapete" Form überführen, die ein Browser als Steuerzeichen interpretieren könnte oder in der für die Seite gewählte Text-Encodierung nicht vorhanden ist.
Daher die Frage: Gibt es sowas und wenn ja wo?

Bis jetzt sieht es wirklich so aus als wenn ich das selber machen müsste. Finde ich blöd.

Thema: Verhindern von HtmlJnjection per HtmlEncode inkl. UTF8
Am im Forum: Web-Technologien

Ein Label rendert aber auch einen

<span></span>
, das will ich aber nich.

Aufhalten lass ich mich davon nich, nur eure Meinungen hätten mich mal interessiert.

MfG

Tilton

Thema: Verhindern von HtmlJnjection per HtmlEncode inkl. UTF8
Am im Forum: Web-Technologien

Hallo,

um immer wieder benötigte Kombinationen von ASP-Controls nich immer wieder zusammenbauen zu müssen habe ich mir eigene UserControls gebaut. Soweit so gut, alles kein Problem.

Ist oft sowas von der Art:


<asp:Literal runat="server" ID="caption" />
<asp:DropDownList runat="server" ID="dropDownList" />
<asp:RequiredFieldValidator runat="server" ID="requiredFieldValidator" ControlToValidate="dropDownList" ErrorMessage="<%$ Resources:Lang,ErrorEntryRequired %>" />

Wenn ich die Bezeichnung, also das Literal mit Namen aus der Datenbank füttere, welche der User selber definieren kann. Genau hier is die Möglichkeit von HtmlJnjection gegeben.

Einfache Lösung:


public string Caption
{
	get { return this.dropDownList.ToolTip; }
	set
	{
		var text = this.Server.HtmlEncode(value);
		this.caption.Text = string.Concat(text, ": ");
		this.dropDownList.ToolTip = text;
	}
}

Frage:

Wie kann ich dem HtmlEncode einreden UTF8 Zeichen in Ruhe zulassen? ZB. muss der mir die ä, ö, usw. nicht mit encodieren. Oder sollte man das trozdem? Nur umsicherzugehn?

MfG

TiltonJH

PS: Hin und wieder is das total verzwickt, manche ASP-Controls machen selber ein HtmlEncode, ander nich. Machne wieder rum nicht bei allen Eigenschaften...

Thema: Generics: Für Constraint "where T : class" auch Nullable<T> erlauben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Um die Verwirrung hoffentlich aufzulösen, habe ich mal die Klassendiagramme der eigentlichen Implementierung hochgeladen.

Wie man da sehn kann wird aus Foo -> Table und aus Bar -> Column.

Das Konzept is also so ne art DB-Table aber mit .Net-Datentypen (deswegen auch kein DataTable).

Jede Spalte hat ihren eigen Datentyp. Man könnte auch einfach alles ohne generic lösen, aber dann müsste man sich irgendwie anders drum kümmern, dass jede Spalte nur mit dem jeweilig richtigen Datentyp bestückt wird.

MfG

TiltonJH

Thema: Generics: Für Constraint "where T : class" auch Nullable<T> erlauben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Der Fehlerteufel

Zitat von TiltonJH
Gleichzeitig aber auch alle normalen Klassen.
-> hätte sein müssen:
Zitat von TiltonJH
Gleichzeitig aber auch alle normalen Klassen erlauben.

Ich seh schon muss etwas mehr ausholen.


internal class Bar<T> : IEnumerable<T> : IBar
{
	[...]
	public void Add(T item) { [...] }
	void IBar.Add(object item)
	{
		if (item is T)
			this.Add((T)item);
		else
			throw new InvalidOperationException("wrong type.");
	}
	Type IBar.BarType { get { return typeof(T); } }
	[...]
}

public interface IBar : IEnumerable
{
	[...]
	void Add(object item);
	Type BarType { get; }
	[...]
}

public class Foo : IEnumerable<IBar>
{
	[...]
	private IList<IBar> bars = new List<IBar>();
	public void AddNewBar<T>()
	{
		this.bars.add(new Bar<T>());
	}
	public void Add(int index, object item)
	{
		this.bars[index].Add(item);
	}
	public Type[] GetBarTypes()
	{
		var array = new Type[this.bars.Count];
		for (int i = 0; i < array.Length; i++)
		{
			array[i] = this.bars[i].BarType;
		}
		return array;
	}
	[...]
}

Ich hoffe nun wird es etwas klarer.

Die Idee mit
BarStruct<T> : IBar where T : struct { }
BarClass<T> : IBar where T : class { }

is da dann schon hilfreich und könnte der Weg zu Lösung sein.


MfG

Tilton

Thema: Generics: Für Constraint "where T : class" auch Nullable<T> erlauben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wäre mgl, ja. Aber mit T wird intern eine Klasse (ich nenn die jetzt mal) Bar<T> angelegt.



BarStruct<T> : IBar where T : struct { }
BarClass<T> : IBar where T : class { }



na ja ... mit dem Gedanken muss ich erst ma' bissel schwanger gehn.

Danke

Thema: Generics: Für Constraint "where T : class" auch Nullable<T> erlauben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich wollte alle NICHT-Nullable<T> Werte-Typen verbieten, sprich erzwingen das man bspw. int? nutzen muss und int nicht.

EDIT: Gleichzeitig aber auch alle normalen Klassen.

MfG

Tilton

Thema: Generics: Für Constraint "where T : class" auch Nullable<T> erlauben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

na ja das ganze Konstrukt ist auch deutlich komplexer. Das Constraint hab ich mittlerweile auch schon ausgebaut.
Sinn war egl. das innerhalb der Klasse Foo Add<T>(null); schreiben kann. Hab das jetzt durch Add<T>(default(T)) ersetzt.

Die Aufgabe des Constraint war egl. eben nur vollwertige "Nullable"s überhaupt zu gelassen sind.
Ohne dieses Constraint könnte Jimmy jetzt auch Werte-Typen verwenden, was der gesammten Hilfsklasse den Sinn nimmt.

MfG

Thema: Generics: Für Constraint "where T : class" auch Nullable<T> erlauben
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe folgendes Problem:


public class Foo
{

	[...]

	public void Add<T>(T item)
		where T : class //damit item auch null sein kann
	{
		[...]
	}

	[...]

}

public static class Program
{
	public void Main(params string[] args)
	{
		var foo = new Foo();
		foo.Add<SomeClass>(new SomeClass());
		foo.Add<int?>(4);
		foo.Add<int?>(null);
	}
}

Nun ist Nullable<T> nun mal ein struct, kann selbst also nicht null sein.
Fehler
The type 'int?' must be a reference type in order to use it as parameter 'T' in the generic type or method 'Foo.Add<T>(T item)'.

Mein Lösungsansatz: eine eigene Klasse nach dem Vorbild von Nullable bauen.
Irgendwie glaube ich, dass das auch nicht zum Ziel führt.

Vorschläge, eure Gedanken?

MfG

Tilton

Thema: In abstrakter Basisklasse eine Methode mit Rückgabewert vom Typ der Subklasse definieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von winSharp93
in manchen Fällen kann man das mit new lösen - aber man sollte wirklich genau wissen, wann und wann nicht; Generics sind meist der geeignetere Weg.

ne, ja, nee...

mir geht es ja genau darum die methoden (o.ä.) nich in den subklassen bekanntgeben oder überschreiben zu müssen, sondern diese per vererbung zu erhalten.

MfG

Tilton

Thema: In abstrakter Basisklasse eine Methode mit Rückgabewert vom Typ der Subklasse definieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von talla
das geht nicht, genau für sowas sind Generics doch da. Warum willst du ohne die arbeiten?

Schade X( !
Warum weil ich zu faul bin mein ganzes ObjektModel auf eben diese Generic-Geschichte umzustellen :D.

Und ich wird dachte das den jeweiligen Typ der SubKlasse nach unten zu geben is komisch, das könnte man doch standardmässig so vorsehn, zb über ein key-wort das ich noch nich kenne .

MfG

Tilton

Thema: In abstrakter Basisklasse eine Methode mit Rückgabewert vom Typ der Subklasse definieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@inflames2k: sorry, aber ich glaube du hast das problem nicht verstanden. die GetThis methode is der dreh und angelpunkt, und die gibt es natürlich kein prob.

@MarsStein: auch du hast nich verstanden nach was ich gefragt habe.


Ich möchte in der basisklasse eine methode, ein property, oder ein feld anlegen, welches aber nich vom typ der basisklasse ist, sondern von der jeweiligen subklasse. da (wie MarsStein richtig feststellte) eine basisklasse nicht wissen kann / sollte welche subklassen es gibt, lässt sich das prob nur über generic (s.o.) lösen

was ich suche ist nach einem weg ohne generic zu nutzen.

ein objekt (die instanz einer klasse) weis ja von welchem konkreten typ sie ist, ergo such ich etwas in der form:


public abstract class Base
{
    //...

    public derivedClass GetThis()
    {
        return this;
    }

    //...
}

public class SomeClass : Base
{
    //...
}

MfG

Tilton

Thema: In abstrakter Basisklasse eine Methode mit Rückgabewert vom Typ der Subklasse definieren
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

folgende Situation:


public abstract class Base<T> where T : class
{
	//...

	public T GetThis()
	{
		return this;
	}

	//...
}

public class SomeClass : Base<SomeClass>
{
	//...
}

Kann man sowas auch ohne Generic lösen? Also das, ich in der Base class mit dem egl Typ des Objekts arbeiten kann ohne ihn per Gerneric bekannt geben zu müssen?

MfG

TiltonJH

Thema: [gelöst] Web.config-Transformation
Am im Forum: Web-Technologien

Zitat von Diräkt
Das Thema ist zwar als gelöst gekenzeichnet, kann mir trotzdem jemand ein vernünftigen Grund geben weshalb dies bei WebApplikationen funktioniert jedoch nicht für WebSites ?

Hallo,

die Frage ist einfach zu beantworten.

Der Projekttyp "WebSite" ist so wie er im Projektorder ist schon vollständig. Diese wird in der Regel nicht "gepublished", sondern er wird so wie er ist einfach 1:1 kopiert (mit allem drumm und drann). Binär-Code wird dann erst zur Laufzeit vom IIS erstellt. Der IIS interessiert sich nur für die Web.config. Eine Web.Relase.config o.ä. wird ignoriert. Die nötigen Transformationen werden nie gemacht.



Der Projekttyp "WebApplikationen" ist deutliche mehr als nur eine WebSite. Sie hat grundsätzlich mehr Ähnlichkeit mit einer dll. So verfügt sie über weit mehr "Methadaten". Diese werden bei beim Erstellen des Projektes ausgewertet. Was muss compiliert werden, was wird in den "Ergebnisordner" kopiert, was wird ingnoriert, was wird Teil der dll usw.

Die Transformations-Anweisungen in den Web.*.config's werden vom VS erst bei einem "publishen" ausgewertet und es schreibt eine neue transformierte Web.config für den Ergebnisordner.

Wenn man also genau hinschaut hat man 4 mitunter verschiedene Anwendungen:
1. In VS im Modus Debug starten. -> Die Debug-Build-Einstellungen für die dll und die Web.config.
2. In VS im Modus Release starten. -> Die Release-Build-Einstellungen für die dll und die Web.config.
3. In VS im Modus Debug publischen und dann mithilfe eines IIS starten. -> Die Debug-Build-Einstellungen für die dll und die Web.config + Transformationen der Web.Debug.config.
3. In VS im Modus Release publischen und dann mithilfe eines IIS starten. -> Die Release-Build-Einstellungen für die dll und die Web.config + Transformationen der Web.Release.config.

(FYI: In den Eigenschaften des Projektes kann unterem Punkt Build eingestellt werden was in welchem Modus (Debug | Relase) gemacht werden soll. Diese Einstellungen haben dann Einfluss auf die generierten "Binär-" bzw. dll-Dateien. Diese und andere Einstellungen kann man bei einer WebSite nicht machen.)

MfG

Tilton

PS: Ich würde einer WebApplication immer den Vorzug geben. WebSite's hab so einige Macken die sehr lästig werden können.

Thema: Zeilenumbruch und andere Exoten
Am im Forum: Web-Technologien

Nach ein wenig rumtesten...

Das <pre></pre>-Tag hat einen Nachteil, es erzwingt einen Zeilenumbruch vor sich.

Lösen lässt sich das ganze auch über CSS mit dem white-space-CSS-Element, welches diesen Nachteil nicht hat und man kann auch noch noch ein paar mehr Einstellungen vornehmen als mit einem reinen <pre></pre>-Tag.


<asp:TemplateField HeaderText="<%$ Resources:Lang,Message %>" ItemStyle-VerticalAlign="Top">
	<ItemTemplate>
		<asp:Label runat="server" Text='<%# Eval("Message") %>' CssClass="editor" />
	</ItemTemplate>
</asp:TemplateField>

span.editor
{ 
	white-space:pre-wrap;
}

Thema: Zeilenumbruch und andere Exoten
Am im Forum: Web-Technologien

Vielen dank.

Die Mischung machst. 8)

Den <pre></pre>-Tag kannte ich noch gar nich. Den und ein asp:Literal (innerhalb eines TemplateField) welches den Text aufnimmt sind die Lösung des ganzen.


<asp:TemplateField HeaderText="<%$ Resources:Lang,Message %>" ItemStyle-VerticalAlign="Top">
	<ItemTemplate>
		<pre><asp:Literal runat="server" Text='<%# Eval("Message") %>' /></pre>
	</ItemTemplate>
</asp:TemplateField>

MfG

Tilton

Thema: Nhibernate: m:1:n statt m:n -> Implementierung?
Am im Forum: Web-Technologien

Hallo,

Eine Gruppe - Item Beziehung ist aber zwangsweise keine m:n Beziehung.

Das wird erst eine m:n wenn items auch in mehreren Gruppen sein können sollen.?

Wenn es denn unbedingt m:n sein muss funzt das bei mir ganz supi.


public GroupMap()
{
	...

	this.HasManyToMany(x => x.Items);
}

public ItemMap()
{
	...

	this.HasManyToMany(x => x.Groups);
}

EDIT:

Eine m:1:n Beziehung, da is doch nur wichtig was "1" ist.

Das Könnte zB sowas sein:


public class GroupItemConnector
{
	public ISet<Group> Groups { ... }
	public ISet<Item> Items { ... }
}

PS: Vorsichtig mit IList und ISet usw. meist wird egl nur eine ISet gebraucht. Es sei denn ein Item soll mehr fach in der selben Group sein.

MfG

Tilton

Thema: Zeilenumbruch und andere Exoten
Am im Forum: Web-Technologien

Hallo,

Kontext:
Ich möchte Text den ich aus meinen DB beziehe in einem GridView darstellen. Funzt auch alles Prima.

Problem:
Der Text hat im Original Zeilenumbrüche. Diese möchte ich natürlich auch mit darstellen.

Meine Lösung:


text.Replace(Environment.NewLine, "<br />")

Das nächte Problem:
Jetzt wird Text in der Form dargestellt:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit.<br />Etiam id erat at tellus tincidunt mollis. Praesent mattis tortor eu est.<br />Donec congue sagittis arcu. Etiam viverra erat ut nulla.<br />Donec hendrerit tortor et metus. Maecenas rhoncus dapibus leo. Donec vel ipsum ut felis vestibulum varius. Mauris ipsum nisl, accumsan eget, gravida non, mattis nec, nunc. Pellentesque pellentesque erat a arcu. Nulla semper, metus ac<br />volutpat congue, ipsum felis mattis felis, sed placerat dolor velit ac urna. Nunc convallis. Donec non ligula nec nunc accumsan consequat.<br />Ut in mauris. Vestibulum vitae neque sed eros convallis molestie. Phasellus quis ligula non tortor<br />mattis mollis. Vestibulum sit amet ipsum ut ligula iaculis tincidunt.

Soll heißen ASP konvertiert löblicher weise meinen Text in eine Web-Darstellbare-Form.
Frage:
Wie schaffe ich es die "<br />" erst einzubauen nach dem die Web-Darstellbare-Form durch ist?
Oder Welche Methode ist dafür zuständig und kann die Überladen werden?

Danke.

MfG

Tilton

Thema: VDesk + Ajax Toolkit = SYS is undefined
Am im Forum: Web-Technologien

Hallo,

ich setzte SSL (https) auch ein mit

ASP.NET 3.5
Ajax Toolkit 3.5

als auch

ASP.NET 4
Ajax Toolkit 4

kann aber von keinen Probsberichten.

Welchen ScriptManager nehmt ihr? (ToolKit | ASP)

Für welche url ist euer Zerzifikat ausgestellt und über welche url greift ihr eure Anwendung zu?

Und was bitte ist "VDesk"?

MfG

Thema: Probleme mit TableCell Width
Am im Forum: Web-Technologien

Ich würde einen weiteren Ansatz in Betracht ziehen.

Ein richtiges Diagramm. Etwas was MS für .NET nach geliefert hat.

http://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx

Und da Bilder mehr sagen als Tausend Worte noch ein Bildchen im Anhang (weitere gibs auch auf der Seite).

Das ganze funzt auch im VS2010. D.h. installiert hab die Control-Erweiterung nicht, aber nützt eh nur dem Desinger, und denn mag ich eh nich 8)

MfG

Tilton

Thema: Benutzerrechte in Bäumen
Am im Forum: Rund um die Programmierung

Hallo,

ich bin gerade dabei Bäume mit Benutzer(Gruppen-)rechten zu versehn. Die eigentliche Implementierung ist nich das Prob. Aber ich frage mich ob ihr sachdienliche Hinweise, Vorschläge oder Literatur dazu habt? Besonders geht es mir darum das Ganze recht performant zu gestalten.
Gespeichert oder geladen wird alles mit NHibernate & lazy-loading.

Zu den Fakten:

  1. es gibt Benutzer und Gruppen; n-n Beziehung

  2. die Rechte sollen dann zwischen den Gruppen und den Bäumen exsitieren, wobei die Gruppe nicht wissen soll/darf, dass es überhaupt Rechte oder gar Bäume gibt.

  3. es soll die Rechte: Lesen, Bearbeiten und evtl. Löschen geben (ich schwanke noch, Löschen als Teil von Bearbeiten anzusehen, da beides gleich gefährlich ist (IMHO))
    Wobei nicht der Baum als solches Bearbeitet/Gelöscht wird, sondern spezielle Elemente die sich zusätzlich an jeden Knoten hängen können

  4. Benutzer haben Rechte auf einen Konten des Baums, diese Rechte werde, nach unten im Baum weiter "vererben"|"gereicht" und gradlinig nach oben bis zum Root nur lesen des Baumes (quasi als Pfad) ermöglichen soll.

  5. Teile des Baums die man nicht mindestens lesen kann, sind auch nicht anzuzeigen (später in der GUI)

ich hoffe ich habe alle...

Danke schon mal für eure Anregungen/Ideen!

MfG

Tilton

Thema: UserControl mit Childs darstellen
Am im Forum: Web-Technologien

Mein Lösung:

Aber immer noch etwas schmutzig, da im C#-Code genau eingestellt werden muss wie viele Controls das ModalPopupPanel selber hat (siehe "const int controlCount = 5;").


<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ModalPopupPanel.ascx.cs" Inherits="WebServer.Utilities.ModalPopupPanel" %>
<div class="divModalBackground">
</div>
<asp:AlwaysVisibleControlExtender runat="server" TargetControlID="panelModalPopup" HorizontalSide="Center" VerticalSide="Middle" />
<asp:Panel runat="server" ID="panelModalPopup" CssClass="divModalPopup" />


using System.Web.UI;

namespace WebServer.Utilities
{
	[PersistChildren(true)]
	[ParseChildren(false)]
	public partial class ModalPopupPanel : UserControl
	{
		protected void Page_Init()
		{
			const int controlCount = 5;
			while (this.Controls.Count > controlCount)
			{
				this.panelModalPopup.Controls.Add(this.Controls[controlCount]);
			}
		}

	}
}

Thema: UserControl mit Childs darstellen
Am im Forum: Web-Technologien

Jup, so hab ich das auch gemacht.


<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ModalPopupPanel.ascx.cs" Inherits="WebServer.Utilities.ModalPopupPanel" %>
<div class="divModalBackground">
</div>
<asp:AlwaysVisibleControlExtender runat="server" TargetControlID="panelModalPopup" HorizontalSide="Center" VerticalSide="Middle" />
<asp:Panel runat="server" ID="panelModalPopup" CssClass="divModalPopup" />


using System;
using System.Web.UI;

namespace WebServer.Utilities
{
	public partial class ModalPopupPanel : UserControl
	{
		protected void Page_Load(object sender, EventArgs e)
		{
		}

		[TemplateContainer((typeof(UserControl)))]
		[PersistenceMode(PersistenceMode.InnerProperty)]
		public ITemplate PanelControls
		{
			get;
			set;
		}

		void Page_Init()
		{
			if (this.PanelControls != null)
			{
				this.PanelControls.InstantiateIn(this.panelModalPopup);
			}
		}

	}
}

Böld is die stelle mit

[TemplateContainer((typeof(UserControl)))]

Das hier ein Typ angegeben werden muss. UserControl funzt auch mit normalen Control.
zb:

<uc:ModalPopupPanel runat="server" ID="modalPopupPanelTest" Visible="false" >
	<PanelControls>
		<asp:Button runat="server" ID="buttonWech" Text="wech..." OnClick="buttonWech_Click" />
	</PanelControls>
</uc:ModalPopupPanel>

Aber was auf diese weise nicht mehr geht is, dass ich die Child-Controls direkt aus der Page ansprechen kann. In meiner Lösung geht das.

Deswegen werde ich woll erstmal bei meiner bleiben. Schön wäre es zu wissen mit wechler Methode die Child-Controls zur laufzeit in das UserControl geschoben werden. Da könnte man die dann einfach in das Panel umleiten.
Dein Mein UserControl soll sich von außen wie ein normales Panel benehmen.

MfG

Tilton

Thema: UserControl mit Childs darstellen
Am im Forum: Web-Technologien

Ich habs gelöst bekommen. Nicht unbedingt sehr elegant, aber es funzt. Wenn jmd verbessungspotensial sieht immer her damit.

Ich weis das mein ModalPopupPanel 6 Einträge in Controls hat, jedes weitere bekommt es von der Page. Und die verschiebe ich einfach in mein Panel (also da wo die hin sollen).

Mir wäre es lieber, ich könnte gleich alle Children in das Panel umlenken. Wenn ich nur wüsste wie.

Meine Code:


<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ModalPopupPanel.ascx.cs" Inherits="WebServer.Utilities.ModalPopupPanel" %>
<div class="divModalBackground">
</div>
<asp:AlwaysVisibleControlExtender runat="server" TargetControlID="panelModalPopup" HorizontalSide="Center" VerticalSide="Middle" />
<asp:Panel runat="server" ID="panelModalPopup" CssClass="divModalPopup" />


using System;
using System.Web.UI;

namespace WebServer.Utilities
{
	[PersistChildren(true)]
	[ParseChildren(false)]
	public partial class ModalPopupPanel : UserControl
	{
		protected void Page_Load(object sender, EventArgs e)
		{
		}

		void Page_Init()
		{
			const int controlCount = 6;
			if (this.Controls.Count > controlCount)
			{
				for (int i = controlCount; i < this.Controls.Count;)
				{
					this.panelModalPopup.Controls.Add(this.Controls[i]);
					this.Controls.RemoveAt(i);
				}
			}
		}

	}
}

EDIT:

@MarsStein, das werde ich mir auch gleich noch mal aunschaun. thx

MfG

TiltonJH

Thema: UserControl mit Childs darstellen
Am im Forum: Web-Technologien

So richtig Schlauch werde ich aus dem Beispiel nicht. Dort wird eine eigene Klasse im page_init erstellt und in den placeholder geschoben.

Ich möchte aber das auf der Page (.aspx) einem bestimmten UserControl (.ascx) Chlidren zu gewiesen werden können, die dann an ein vorherbestimmten Stelle innerhalb des UserControls erstellt werden. Das Beispielt hilft da nicht wirklich. ich weis das die Children auch dem UserControl.Controls property zu gewiesen werden. aber angezeigt werden sie nirgens und schon gar nich wo ich die gerne hätte.

MfG

Tilton