Laden...

Forenbeiträge von sra Ingesamt 230 Beiträge

25.03.2008 - 13:13 Uhr

Also du willst gar nicht das Popup refreshen, sondern die Openerseite?

Dann müsste das ungefähr so funktionieren:
document.opener.location.href = document.opener.location.href; // natürlich nicht getestet, - könnte auch window antstatt document heissen.

25.03.2008 - 10:45 Uhr

Da ich deine Frage nach lesen deines Textes nicht mehr ganz verstehe, antworte ich einfach auf die Frage im Titel deines Posts.

document.location.href = "aktuelleSeite.aspx" // Sollte ohne Clientseitiges einverständnis funktionieren

24.03.2008 - 14:57 Uhr

Hallo Peter

hm... Du hast recht. Zwar ist der Button nicht als aktiv zu erkennen, aber bei Enter wird trotzdem der richtige ausgeführt. Habe das gestern irgendwie einfach nicht auf die Reihe gekriegt 😠

Tut mir leid, dass ich dich so früh am Morgen noch wach gehalten habe.

Danke, gruss

23.03.2008 - 23:49 Uhr

Ich habs grad nicht da, aber da du gerade online bist 🙂
Ich meine ein x beliebiges Formular - nicht das, dass mit dem asp Form Tag definiert ist. Ansonsten Relevanten Code kannst du dir so vorstellen, wie es in den Beispielen aussieht.

Sprich <asp:Panel runat="server" id="id"></asp:Panel>. Und dann halt this.id.DefaultPanel = "pnlSpeichern";.

Per Javascript würdest du einfach den onLoad Event abfangen und dann einmalig document.getelementbyid("id").focus(); setzen?

23.03.2008 - 23:11 Uhr

Hallo

Wer hat auch an Ostern Zeit mir eine Frage zu beantworten? 🙂

Für ein aktuelles Projekt habe ich relativ viele Formulare. Unter jedem dieser Formualare habe ich erst einen "Maske leeren" Button und dann einen "speichern" Button. Mein Problem ist, dass nun standardmässig der Maske leeren Button aktiv ist und somit bei jedem Enter in einem Formularfeld die Maske neu geladen wird.

Als vermeindliche Lösung habe ich den Form.DefaultButton und Panel.DefaultButton gefunden. Allerdings funktioniert das bei mir nur solange ich in kein Formularfeld klicke. Sobald ich das mache ist sofort wieder der falsche Button aktiv. Habt ihr damit schon gearbeitet und ähnliche Erfahrung gemacht, oder mache ich einfach etwas falsch?

Ich benutze in dem Projekt Masterpages. Ich habe zwar gelesen, dass es damit Probleme geben soll, aber da ich die Eigenschaft zur Laufzeit setze, hätte ich gedacht, das müsse so gehen. Das selbe Problem habe ich aber auch, wenn ich um das Formular ein Panel setze und dessen DefaultButton Eigenschaft setze.

Es muss doch irgendeine gute Lösung in ASP.NET geben um einen DefaultButton zu kriegen?

23.03.2008 - 22:48 Uhr

hallo winSharp93

Deine Idee von List.RemoveAt und Insert finde ich so genial und einfach, dass ich die morgen einfach ausprobieren werde. Ich glaube genau so etwas habe ich gesucht (war wohl zu sehr auf meine Idee mit dem Array fixiert, dass ich die List<> gar nicht in Betracht zog). Danke.

Mit einem Dictionary Objekt habe ich angefangen. Ich hatte dann die ID als Key und alten und neuen Sort als Integer Array. Allerdings ist es relativ umständlich zu handhaben und imho fast unmöglich das Ding nach dem zweiten Element im Valuearray zu sortieren.

23.03.2008 - 20:11 Uhr

Genau das war auch mein erster Gedanke 😁
Dabei sehe ich folgendes Problem: Da ich pro Datensatz drei Relevante Informationen habe (Id, alter Sort, neuer Sort - wobei nur die Id unique ist, die Sorts nicht zwingend), kann ich kein eindimensionales Array nutzen.

Oder sollte ich bereits da einen anderen Weg suchen (bitte lies meine Frage ganz durch - das mit dem Bubblesort macht mir in Hinsicht auf Version 0.8 noch keine ernsten Sorgen).

23.03.2008 - 19:30 Uhr

Hallo

Ich habe eine Liste von Artikeln (aus der DB mit Sort), die ich den Benutzer neu sortieren lassen soll. Ich stelle diese Liste also sortiert dar, und habe auf jeder Zeile eine Textbox, in der der aktuelle Sort steht und der User den neuen Sort eingeben kann (vom GUI her ist das so vom User gewünscht).

Nun soll er aber nicht unbedingt eine neue, korrekte Reihenfolge eingeben müssen, sondern er soll auch einfach z.B. dem Datensatz mit dem Sort 4 neu den Sort 1 geben, ohne sich um die anderen Datensätze zu kümmern. Folglich soll die Logik erkennen, dass da eine neue 1 ist, und die bisherige Sort 1 (und alle Datensätze bis und mit Sort 3) um eins erhöhen.

Soweit so einfach. Ich habe aber echte Mühe das umzusetzen. Bislang habe ich die Werte (also: GUID des Datensatzes, alter Sort, neuer Sort) in ein zweidimensionales Array gepackt und dieses per Bubblesort nach dem neuen Sort sortiert. Nun frage ich mich... wie weiter?

Theoretisch muss ich nun das ganze Array nochmal durchgehen, gucken ob der neue Sort gleich ist wie der alte, und wenn nicht den Sort des aktuellen Datensatzes auf den neuen ändern. Danach muss ich alle Datensätze durchgehen, deren Sort zwischen dem neuen (1) und dem alten (4) ist, und diese je 1 hochzählen. Das muss ich für das ganze Array machen.

Bitte gebt mir einen Tip. Wie würded ihr das umsetzen?

20.03.2008 - 09:08 Uhr

Was mir noch dazu einfällt ist, dass du das auf der Datenschicht abfangen kannst, wenn du eine DAL verwendest. Ansonsten weiss ich auch nicht weiter.

19.03.2008 - 15:42 Uhr

Wenn du auf deiner Textbox Databinding verwendest, dann wird der Initialwert sowieso überschrieben (wenn auch gegebenenfalls mit "") - ein Initialwert bringt dir also gar nichts.

Du kannst aber eine public Methode erstellen, die einen String zurückgibt und der du den "gebundenen Wert" übergeben kannst. Dann kannst du auf NULL oder string.empty abfragen und durch einen "initialwert" erstetzen.

17.03.2008 - 12:07 Uhr

Für ein bestehendes CMS soll ich eine neue Seitenübersicht erstellen. Ziel ist es, dass man in einem Gridview alle Seiten aufgelistet bekommt inklusive einiger Eigenschaften wie Status oder aktuelles Skin.

Nun hätte ich die Auflistung natürlich gerne im hierarchischen Kontext. Auf der DB habe ich eine Child/Parent Relation (sprich ein fk auf eine andere Site, die dann der Parent ist). Wie stelle ich es nun am elegantesten an, diese Hierarchie in mein Grid zu bekommen?

Mein erster Gedanke war es die von Linq generierte Site (Klasse) so zu erweitern, dass es eine Methode gibt, welche jeweils nur die Childelemente zurückgibt und als Parameter entweder null (oberste Ebene) oder int ID nimmt. Das Problem? Ich weiss nicht, wie ich das dann ins Gridview bringe - echt nicht 😠

Brauche ich dann eine Objectdatasource (da eine Linqdatasource ja eher mit einer SQLDatasource zu vergleichen ist)? Und wie schaffe ich es die Untersites ins Grid zu kriegen? Muss ich dann per OnRowDatabound jeweils die zusätzlichen Punkte (von obiger Methode zurückgegeben) in das Grid hineinmanipulieren, oder kann man das irgendwie intelligenter lösen?

Was würded ihr mir raten?

07.03.2008 - 13:31 Uhr

Hallo

Danke für eure Antworten.
Neben dem Verpackungsnamen möchte ich auch noch den Inhalt darstellen. Und zwar stelle ich mir das so vor, dass der Inhalt entweder das ist, nachdem gesucht wird, oder aber der neueste hinzugefügte Inhalt (wenn nach Verpackung gesucht wird).

Ich bin inzwischen zum Ergebnis gekommen, dass das nur mit zwei unterschiedlichen Querys zu lösen ist. Der eine ist der, der oben schon beschrieben ist (JOIN), mit dem man nach Inhalten sucht. Der andere müsste sowas sein:

SELECT *, 
(SELECT Top 1 Name FROM Inhalt 
  INNER JOIN VerpackungZuInhalt ON Inhalt.Id = VerpackungZuInhalt.fk_Inhalt
  INNER JOIN Verpackung ON VerpackungZuInhalt.fk_Verpackung = Verpackung .ID
  WHERE Verpackung .fk_Verpackung = @Verpackung) FROM Verpackung WHERE Verpackung.Name LIKE %@Verpackung%

Könnte das so hinhauen (ich habe noch nie Unterabfragen benutzt!)

06.03.2008 - 16:44 Uhr

Hallo

Ich habe bereits vor einigen Wochen mal dieses Problem gepostet. Nun habe ich das selbe Problem wieder (da ich es damals erfolgreich verdrängen konnte).

Mein System besteht aus Daten zu Verpackung und Inhalt - n:n verknüpft. Jede Verpackung kann also diverse Inhalte haben und gleichzeitig kann jeder Inhalt auch in verschiedenen Verpackungen stecken. Dazu habe ich nun eine Suchmaske erstellt, in der man sowohl nach Verpackung als auch nach Inhalt suchen kann.

Sucht man nach Verpackungsnamen sollen alle Verpackungen mit diesem Namen (%LIKE%) aufgelistet werden und umgekehrt sollen, bei entsprechender Suche nach Inhalt, alle Verpackungen die den entsprechenden Inhalt beinhalten aufgelistet werden. Das Problem ist nun natürlich, dass bei einer Suche mit dem Verpackungsnamen als Kriterium jede Verpackung x mal kommt - so oft wie es Inhalte dafür hat.

Der SQL sieht folgendermassen aus:

SELECT * FROM Inhalt 
INNER JOIN VerpackungZuInhalt ON Inhalt.Id = VerpackungZuInhalt.fk_Inhalt
INNER JOIN Verpackung ON VerpackungZuInhalt.fk_Verpackung = Verpackung.Id 

Bisher bin ich beim Binden der Resultatdaten an das Gridview einfach alles durchgegangen und habe manuell die doppelten Einträge entfernt (Gruppenbruch). Dies kann ich nun nicht mehr, da ich nun Serverseitiges Paging verwende und deshalb onRowDatabound nur jeweils eine Teilmenge der SQL Resultate bekommt.

Was könnt ihr mir vorschlagen? Gibt es eine SQL Lösung für dieses Problem? Soll ich zwei verschiedene SQL abschicken (einen für die Suche nach Inhalt, einen für die Suche nach Verpackung) - was mache ich, wenn sowohl als auch als Kriterium gegeben sind? Gibt es eine Möglichkeit trotz Serverside Paging das Resultatset manuell zu bearbeiten?

So wies jetzt ist bekomm ich jede Verpackung 10mal angezeigt (da je ca.10 verschiedene Inhalte), obwohl ich nach der Verpackung "soundso" gesucht habe, die es so ähnlich nur 4 mal gibt.

Gruss
sra

04.03.2008 - 18:27 Uhr

Es ist zwar implizites Databinding, aber wohl nicht zwei-wege-binding.

Die Reorderlist ist ein Control, das intern die Select und Updatemethoden der Datasource aufruft. Ich nehme mal schwer an, dass die Jungs von Codeplex das Baby anständig getestet haben, also wird da nicht schief gehen.

Ich werd mal gucken, ob mir der SQL Server Profiler was sagt (wenn ich denn unter den Unmengen Daten da die richtigen mal finde).

04.03.2008 - 15:26 Uhr

Hallo Peter

Das Problem, das sich mir stellt ist: Wo setze ich einen Haltepunkt?
Werden doch die Select und Update Methode der SqlDatasource vom Control direkt aufgerufen (ohne Umweg über Code behind).

04.03.2008 - 14:09 Uhr

Hallo

Ich versuche mich gerade an der ReorderList des Ajax Control Toolkits. Meine Aufgabe ist es (wer hätte das gedacht), den User die Reihenfolge von Einträgen in einer Liste selbst bestimmen zu lassen.

Ich habe mich als datasource für eine SqlDatasource entschieden (ich weiss, ist nicht ideal, aber die Struktur von WCSF verunmöglicht es so ziemlich über eine Objectdatasource direkt an die DAL zu gelangen).

Mein Problem ist: Die Liste "reordert" nicht. Die Items werden zwar korrekt dargestellt, und ich kann sie per Drag'n Drop verschieben, aber wenn ich die Seite erneut aufrufe haben diese wieder die Reihenfolge von vorher (und in der DB hat sich auch nicht getan).

Nun ist es recht schwierig herauszufinden, wo der Fehler liegt. Schliesslich bekomme ich keine Fehlermeldung. Wie würded ihr vorgehen um so etwas zu debuggen?

03.03.2008 - 14:42 Uhr

Wovon redest du?
Also welche Technik nutzt du?

28.02.2008 - 14:01 Uhr

Obwohl man imho nicht von einem MVC Pattern sprechen kann, da aspx und code behind doch sehr direkt ineinandergreifen (Events / Databinding) und so stark verknüpft sind, dass es Trennung praktisch nur der Übersicht dient.

Ein Prinzip von MV(C/P) ist ja, dass man nicht auf direkt auf Implementationen programmieren soll, sondern auf Schnittstellen. Was ja auch sinnvoll ist, wenn man die Vorteile von MVC haben will.

28.02.2008 - 13:57 Uhr

Falls der Ersteller den Thread wiederfindet...

Sieh dir mal das DataList oder Repeater Control an. Da kannst du problemlos Commandbuttons reinpacken, an die du auch gleich die ArtikelID binden kannst (habs aber noch nie ausprobiert).

25.02.2008 - 13:09 Uhr

Wo stehst du denn jetzt im Moment überhaupt?
Die Session setzen hast du gesagt funktiert inzwischen (?) und du hast nur noch beim Auswerten Probleme? Ist das so?

Prüfe mal zwei Dinge
a: hast du diese Zeile noch irgendwo:

Session.Add("username", txt_username)

dann mach da ein .Text dran (an deine Textbox)
b: mach ma aus deinem "login" wieder Session["login"] (aber nur wenn du irgendwo eine Session["login"] setzt!)

22.02.2008 - 17:40 Uhr
// Secure.aspx  
bool loggedIn;  
if(!bool.TryParse(Session["Login"], out loggedIn) || !loggedIn) {  
    Respone.Redirect("nixda.aspx");  
}  
  

Kleine Frage am Rande: Würde ein reines if((bool)Session["Login"]) bei einem null-Wert in der Session einen Laufzeitfehler ergeben? Habe das so noch nicht gesehen, aber sieht doch schon nach besserem Code aus 🙂

@Frank: Du musst folgendes machen:
Auf jeder (geschützten) Seite im Page_Load überprüfen ob in der Session etwas gescheites steht (siehe ~5 Zeilen weiter oben) und wenn nicht, dann leitest du einfach ins nirwana weiter.

Dazu brauchst du auf der Login Page nur folgende Sessions setzen

  • Login (true oder false)
  • UserID (deine User haben doch bestimmt eine Id in der DB)
  • vielleicht noch gleich die Berechtigungsgruppe dazu (um nicht immer in der DB nachschauen zu müssen)

Wenn du den User direkt nach dem Login auf eine bestimmte Seite weiterleiten willst, dann machst du das am besten gleich noch im btn_login_Click und nicht erst auf der nächsten Seite (ich gehe mal davon aus, dass du den User nur einmal weiterleiten willst).

19.02.2008 - 16:36 Uhr

Hm... da kann ich dir nur noch einen Ausschnitt einer funktionierenden Web.Config zeigen, und hoffen du erkennst einen Unterschied zu dir 🙂

Here we go:

    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere" />
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication" />
        </sectionGroup>
      </sectionGroup>
    </sectionGroup>

(Das ist die Sektion, die du auch in deinem Post zeigst)


    <compilation debug="true">
      <assemblies>
        <add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="System.Configuration.Install, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
        <add assembly="Infragistics2.WebUI.UltraWebGrid.v7.2, Version=7.2.20072.61, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" />
        <add assembly="Infragistics2.WebUI.Shared.v7.2, Version=7.2.20072.61, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" />
        <add assembly="Infragistics2.WebUI.UltraWebTab.v7.2, Version=7.2.20072.61, Culture=neutral, PublicKeyToken=7DD5C3163F2CD0CB" />
      </assemblies>
    </compilation>

(Die Assemblies Sektion nicht vergessen - Was nicht nach Extensions aussieht kannst du weglassen)

    <httpHandlers>
      <remove verb="*" path="*.asmx" />
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />
    </httpHandlers>

(und noch ein Eintrag)

Ich behaupte mal frech, das sind die relevanten Einträge. Bin mir aber nicht ganz sicher, ob da nicht noch was vergessen gegangen ist.

Im Pages Abschnitt wo du den aktuellen Fehler hast, habe ich leider gar nichts drin.

Gruss
sra

19.02.2008 - 08:59 Uhr

Die System.Web.Extensions muss man auf dem Server installieren, da diese im GAC (Global Assembly Cache) daheim sind. Da reicht es nicht, diese dll in den bin Ordner zu kopieren wie z.B. beim AJAX Control Toolkit.

27.01.2008 - 10:57 Uhr

Hallo Peter

Viel Code zu zeigen gibt es da gar nicht. Wie gesagt - es handelt sich bei meinen Problemchen um Controls in Form von dll's, welche über diese WebResource.axd ihre Bilder nachladen (für Icons etc).

Ich glaube aber inzwischen, dass das Problem durch meinen HTTP Modul oder meiner Web.Config verursacht wird.

Meine Web.Config:

<httpHandlers>
	<remove verb="*" path="*.asmx"/>
	<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
	<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>

<httpModules>
	<add type="Rewrite.NET.Rewrite,Rewrite.NET" name="Rewrite.NET"/>
	<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>

<system.webServer>
	<validation validateIntegratedModeConfiguration="false"/>
	<modules>
		<remove name="ScriptModule"/>
		<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></modules>
	<handlers>
		<remove name="WebServiceHandlerFactory-Integrated"/>
		<remove name="ScriptHandlerFactory"/>
		<remove name="ScriptHandlerFactoryAppServices"/>
		<remove name="ScriptResource"/>
		<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
		<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
		<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </handlers>
</system.webServer>

In meinem HTTP Modul mache ich im Grunde nichts anderes als:


public void Init(System.Web.HttpApplication Appl)
{
    Appl.AuthenticateRequest += new System.EventHandler(Rewrite_AuthenticateRequest);
}

public void Rewrite_AuthenticateRequest(object sender, System.EventArgs args)
{
    System.Web.HttpApplication app = (System.Web.HttpApplication)sender;
    // Datenbankabfragen
    app.Context.RewritePath("/Default.aspx?Page=1&Site=1"); // Page und Site aus DB
}

Wenn ich den Pfad zu einem der Ressourcen-Bilder im Browser eingebe, dann komme ich auf meine Startseite (was mein HTTP Modul macht, wenn es die Seite in der DB nicht findet).

btw. der Pfad sieht übrigens so aus: http://domain.ch/WebResource.axd?d=ut9du8zDxojKR0z1n_qx0Yjzi2rcLJ_gn4nE2AE_odbOdJZFBKmp8EyvJv9t0ZNwohQEVnydK-tuwh1bhwclNw2&t=633369720461930000 du hattest recht Peter.

Gruss
sra

Edit: Ich glaube es liegt daran, dass mein Modul Standardmässig auf die Startseite weiterleitet - werds gleich ma ohne probieren.
Edit 2: Das wars. Jetzt checke ich einfach, ob die Request-Dateiendung .aspx ist, und wenn nicht, dann zeige ich nicht die Startseite, sondern leite weiter an die angeforderte Ressource.

26.01.2008 - 19:55 Uhr

Hallo Forum

Ich hab da ein Problem mit der FreeTextBox und dem IZWebFileManager. Beide Tools nutzen eingebettete Ressourcen für Bilder und Javascriptfiles. Das Problem ist, dass das bei mir nicht klappen will.

Wenn ich die Seite aufrufe, in der ich die Controls platziert habe, so kommen nur diese IE Platzhalter, wenn er das Bild nicht findet. Als URL haben diese Bilder jeweils http://www.meinedomain.ch/WebResource.axd?LangerKey. Diese Datei habe ich nirgends, aber ich nehme an, dass axd Requests von einem Handler abgefangen werden (?).

Woran könnte das liegen, dass er meine Referenzen nicht schluckt? Ich habe bisher noch nie mit eingebetteten Ressourcen gearbeitet - gilt es da etwas zu beachten?

Vielen Dank für eure Antworten
sra

22.01.2008 - 14:48 Uhr

Der Trick ist, die Anzahl der dynamisch erstellten Textboxen in den ViewState zu speichern und Page_Load diese Anzahl an Textboxen zu generieren.
War gar nicht so schwierig.

22.01.2008 - 11:17 Uhr

Hallo Forum

Ich habe da gerade ein kleines Problem, von dem ich sicher bin, dass es für euch nur eine kleine Sache ist.

Ihr kennt sicher diese Webforms, wo man beliebig viele "Einträge" machen kann. Man hat da jeweils eine Anzahl Textboxen und einen Button, der eine weitere Textbox hervorzaubert. Das Gleiche zB bei gmail mit Dateianhängen. Natürlich passiert das ohne, dass die Textboxen ihren Wert verlieren.

Ich habe mir dazu eine asp:Table gemacht und die in ein UpdatePanel gepackt. Darunter ein Button, der als Asyncpostbacktrigger definiert ist. Im Button_Click Event erstelle ich mir eine neue TableRow mit einer Textbox und füge diese der bestehenden asp:Table hinzu.
Das funktioniert aber nur einmal. Wahrscheinlich, weil dynamisch erzeugte Controls auch einen Asynchronen Postback nicht überleben. Wie aber sage ich der Page_Load Methode, wieviele Textboxen bereits da sind und welche Werte sie haben? Ist hier ViewState das Stichwort, oder würded ihr das überhaupt ganz anders machen?

Freundliche Grüsse
sra

16.01.2008 - 11:23 Uhr

Ich glaube er meint die aspx Datei, also sozusagen der "Code Before" 🙂
Wenn du einem Usercontrol dynamisch Properties setzen willst, dann mach das doch am besten im Code Behind im Page_Load Event.
Dann kannst du relativ einfach mit this.ucSowas.MeineProperty = soneVariable; auf die Properties zugreifen und diese füllen.

11.01.2008 - 00:33 Uhr

Hallo zusammen

Ich habe bei einer Applikation die Gridviews auf Server Side Paging "aufgerüstet". Nun habe ich bei einem Gridview das Problem, dass ich den Gruppenbruch nicht mehr verwenden kann.

Das Gridview zeigt Produkte und ihre jeweilige Lage an. Produkt und Lage sind in der DB in einer n:n Beziehung, somit kann also jedes Produkt mehrere Lagen und jede Lage mehrere Produkte haben. Das Gridview ist das Resultat einer Suchabfrage, in der man sowohl nach Produkt als auch nach Lage suchen kann. Soweit klar? 😁

Die Idee ist, dass man jedes Produkt in der Liste nur einmal sehen kann (was ich mit einer SQL Abfrage einfach nicht hinkriege!). Deshalb habe ich bisher einen Gruppenbruch im Controller der App gemacht und das hat mit dem Paging und auch dem Sorting wunderbar funktioniert.
Wenn ich jetzt, mit dem Server Side Paging, einen Gruppenbruch mache, dann gibt es nicht die erwünschten 20 Resultate, weil ich ja den Bruch nur auf die 20 Datensätze ausführe, die ich geliefert bekomme.

Habt ihr dazu eine Idee? Oder könnte man das vielleicht sogar mit einer besseren SQL Abrage lösen? Als DAL Benutze ich übrigens SubSonic, falls sich vielleicht da mit partial classes etwas machen lässt.

Freue mich auf eure Antworten.

02.01.2008 - 13:00 Uhr

Wie ist das denn ganz allgemein? Muss ja nicht jeder die WCSF gleich installieren.
Was könnte man falsch machen?

02.01.2008 - 09:22 Uhr

Hallo

Ich bin gerade fürs Geschäft an nem WCSF Projekt. Um dieses nun möglichst realistisch zu testen möchte ich dieses direkt auf einem IIS laufen lassen.

Der IIS ist eingerichtet und konfiguriert, aber sobald ich die Webseite aufrufe bekomme ich einen Web.Config Fehler, der besagt, dass er den CompositeWeb Block nicht kennt.

Muss ich die WCSF irgendwie auf den IIS installieren?

21.12.2007 - 15:12 Uhr

Gerade habe ich gesehen, dass Linq auch Partial Classes generiert. Insofern erübrigt sich meine Frage.

War wohl etwas voreilig mit diesem Thread 🙂

Schöne Feiertage allerseits

21.12.2007 - 13:18 Uhr

Hallo allerseits

Ich stelle mir gerade die Frage, ob ich in einem bestehenden System (CMS) die DAL von SubSonic zu LinQ to SQL ändern soll. Zwar bin ich sehr zufrieden mit SubSonic, aber ich habe einige Videos über LinQ gesehen und muss sagen, dass es mich schon sehr interessiert.

Das Problem - der Grund wieso ich noch nicht umgestellt habe - ist, dass ich in SubSonic gebraucht von den generierte partiellen Klassen mache. Sprich: ich habe die generierten Klassen um eigene (virtuelle?) Properties erweitert.
Ein Beispiel ist die SubSonic Menuklasse. In der Datenbank habe ich dazu nur eine Parent-Child beziehung (sprich nur einen fk zum übergeordneten Menudatensatz). In der erweiterten Klasse habe ich dann auch eine Liste der Childmenupunkte als Property. Ich würde nur ungern auf diese Möglichkeit verzichten.

Gibt es eine Möglichkeit sowas auch mit LinQ zu erreichen? Wozu würdet ihr mir raten? Oder hat jemand ganz allgemein schlechte Erfahrungen mit LinQ gemacht?

Freue mich auf eure Kommentare.
Gruss
sra

12.12.2007 - 11:14 Uhr

Hallo Herbivore

Danke - werd mal danach googlen.
Ich weiss, dass es das schon vor Vista gab, aber ich denke mal der Explorer in Vista ist die bekannteste Anwendung die diese Art Sort verwendet - zumindest hast du mich verstanden 😁

Gruss
sra

12.12.2007 - 10:55 Uhr

Hallo Forum

Ich möchte ein Gridview, das mir Gebäude (Adressen) auflistet, nach dem Strassenname/Nr so sortieren wie es in Vista mit den Dateinamen geschieht. Also nicht nur nach ASCII-Alphabet wo die 10 vor der 9 kommt, sondern auch nach Nummern.

Im Endeffekt soll die Liste die vorher so aussieht:

Baselstrasse 20c
Baselstrasse 5
Luzernerstrasse 102
Luzernerstrasse 33
...

neu so aussehen:

Baselstrasse 5
Baselstrasse 20c
Luzernerstrasse 33
Luzernerstrasse 102
...

Also trotzdem auch immernoch nach dem Alphabet, aber eben bei den Nummern nicht!
Wie nennt man diese Art sortierung und wie kann ich die am einfachsten erreichen?

Danke für eure Zeit.

23.10.2007 - 07:57 Uhr

Oder unabhängig von meinem Code: Wie würded ihr ein Menu umsetzen, dass die untermenus nur nach bedarf dynamisch anzeigt oder nicht?

22.10.2007 - 11:12 Uhr

Hallo ihr, ich wiedermal

Ich bin gerade daran ein Menu zu erstellen, bei dem die Untermenus erst angezeigt werden, wenn der entsprechende übermenupunkt ausgewählt wurde.

In der Datenbank habe ich alle Seiten, die im Menu ersichtlich sein sollen gespeichert. Als einziges (relevantes) Feld, hat jeder Datensatz ein fk_ParentsiteId, welches die Id des nächsthöheren Eintrages (in der Hirarchie) enthält.
Um das Menu zu rendern, loope ich zuerst über alle Einträge der Datenbank, welche keine ParentId haben (oberste Menuschicht), und danach gehe ich für jeden solchen Eintrag rekursiv die "Kinder" durch (select * from sites where fkparent = @Menupunktid).

Nun brauche ich neu aber noch eine zusätzliche Prüfung, die aussagt, ob der Menupunkt im aktuellen Kontext gezeigt werden soll oder nicht. Neben der Id und der ParentId des aktuell geloopten Menupunktes habe ich natürlich noch die SiteId der aktuellen Seite.

Meine Idee was diese hier:

     private bool IsRelatedTo(int SiteId, int RelatedTo)
    {
        if (SiteId == RelatedTo) return true;

        Code46_Site site = new Code46_Site(SiteId);
        foreach (Code46_Site subsite in site.Subsites)
        {
            if (this.IsRelatedTo(subsite.Id, RelatedTo)) return true;
        }

        if (site.ParentSite != null)
        {
            Code46_Site parent = new Code46_Site((int)site.ParentSite);

            foreach (Code46_Site subsite in parent.Subsites)
            {
                if (site.Id != subsite.Id)
                {
                    if (this.IsRelatedTo(subsite.Id, RelatedTo)) return true;
                }
            }
        }

        return false;
    }

Code46_Site ist übrigens nur eine Klasse, die die DAL wrapped um einige "bequeme" Properties, wie .Subsites, zur Verfügung zu stellen.

Im Grunde genommen prüfe ich zwei Kriterien:

  1. Ist der aktuell gerenderte Menupunkt mit der aktuell angezeigten Seite verwandt? Anders - ist einer der (rekursiv gesuchten) Unterpunkte die aktuelle Seite. Dasselbe wird mit den "Brüdern" also den Menupunkten mit dem selben fk_Parentsite gemacht.

  2. Ist der aktuell gerenderte Menupunkt direktes Kind der aktuell angezeigten Seite?

Das Problem ist, dass dieser Ansatz Ressourcen frisst wie Kühe, was dann in einem Bad Request endet. Der erste Teil beinhaltet eine Methode, die für jeden Menupunkt aufgerufen wird, und solange rekursiv die "Kinder" durchsucht, bis es keine mehr hat, oder die Bedingung erfüllt ist. Bei jedem Aufruf holt sich diese Methode einen neuen Datensatz aus der Datenbank. Ich mag gar nicht ausrechnen wie oft ich da den selben Datensatz aus der DB hole.

Wie würded ihr vorgehen? Wie kann man das besser (überhaupt erst gut) lösen?

15.10.2007 - 11:33 Uhr

Hallo

So ganz klar ist mir das noch nicht. Die Methode Init bezieht als Parameter ein HTTPApplication Object und kein HTTPContext Object. Ich kann auch nicht casten, und wenn ich von dem HTTPApplication-Objekt die Session haben will, gibt es auch einen Fehler [HttpException (0x80004005): Der Sitzungszustand steht in diesem Kontext nicht zur Verfügung.]

Das Ganze mit ein bisschen Code unterlegt:


    public class Rewrite : System.Web.IHttpModule, IRequiresSessionState
    {
        public void Init(System.Web.HttpApplication Appl)
        {
            Appl.BeginRequest += new System.EventHandler(Rewrite_BeginRequest);
        }

        public void Rewrite_BeginRequest(object sender, System.EventArgs args)
        {
             app.Context.RewritePath("/" + this._Admin + ".aspx?Page=" + pageId.ToString() + "&Site=" + siteId.ToString());
        }
     }

Ist die Session in diesem Teil der Applikation überhaupt verfügbar?

12.10.2007 - 11:03 Uhr

Hallo

Ich möchte aus einem **HTTP Module **Zugriff auf die Session haben. Je nach Session wird der User auf die Adminpage oder auf die normale Page weitergeleitet (das Modul macht mir auch sonst alles URL Rewriting). Google spuckt mir dazu diese Seite aus: http://msdn2.microsoft.com/de-de/library/system.web.sessionstate.irequiressessionstate(VS.80).aspx

Daraus lese ich, dass ich das Methodenlose **IRequiresSessionState **implementieren muss, um an die Session zu gelangen. Leider finde ich nirgends ein Beispiel wie man das umsetzt. Klar - dem HTTPModule die Schnittstelle hinzufügen ist kein Problem, aber wie komme ich denn nun auf das Sessionobjekt?

Kann sich jemand mal die Seite ansehen, und mir sagen wie das zu interpretieren ist? Ich glaube ja fast, da habe ich bei mir noch eine erhebliche Wissenslücke entdeckt!

Danke & Gruss
sra

09.10.2007 - 11:32 Uhr

Das war eine Verzweiflungstat. Ich hätte nie gedacht, dass das Ausschalten der Firewall einen Effekt hätte 😁

Was ich bisher übersehen hatte, ist dass die neue Seite über https läuft (die alte war normal http). Ich denke mal, dass https über einen anderen Port kommuniziert und dass es eventuell damit zusammenhängt. Allerdings kam der Kunde auch vorher auf die Seite selber und könnte ledeglich die Formulare nicht abschicken (übrigens alle Formulare, wie sich herausgestellt hat - nicht nur die grossen!). Ausserdem laufen ja diverse Seiten mit https...

Naja - ich zerbrech mir mal lieber nicht länger den Kopf darüber, und tue es als eine UserNotQualifiedException ab.

Gruss
sra

08.10.2007 - 17:04 Uhr

Die "Lösung" ist: Windows Firewall deaktivieren!
Ich kann mir aber beim besten Willen nicht vorstellen, dass einen direkten zusammenhang hat. Da muss eher noch mit einer Kombination von Hardwarefirewall und Windows Firewall zusammenhängen (obwohl sich mir auch dies nicht so recht erschliessen will).

Falls jemand eine Erklärung hat bitte nicht zögern 🙂

07.10.2007 - 20:20 Uhr

Müsste ich mich vielleicht mal ein bisschen mit Tracing beschäftigen? Ich habe es bisher noch nie gebraucht (oder mich noch nie damit beschäftigt). Ich denke damit könnte man doch mehr herausfinden (?).

06.10.2007 - 18:33 Uhr

Beispielcode kann ich am Montag nachliefern. Grosse Formulare sind für mich Formulare mit vielen Eingabefeldern. In diesem Falle (oder in einigen dieser Fälle) sind das für jeden Datenbankeintrag je 4 Felder.

Das Problem ist auch, dass ich den Fehler nicht reproduzieren kann. Bei mir läuft alles bestens, und scheinbar läuft auch bei dem Kunden, der das Problem hat soweit alles gut.

06.10.2007 - 16:10 Uhr

Jede Seite beinhaltet nur ein Form Tag.

Die Formulare werden alle "normal" (Clientseitig mit den Validator-controls) validiert. Ich werde wohl am Montag so ein Formularabschicken mit dem Benutzer durchspielen, um sicherzugehen, dass die Validierung korrekt passiert. Allerdings werden alle Validatoren fett rot dargestellt und nicht mal DAUs sollten das übersehen.

Das Problem tritt nur bei den längeren Formularen auf. Gibt es irgendeine Limite an KB für einen Request? Kann man das einstellen? Der Viewstate dürfte ja die Grösse einer gerenderten aspx Seite recht beeinflussen.

06.10.2007 - 09:39 Uhr

Hallo

Ich habe gerade einen Fehler (oder ein Problem) der eher komischen Sorte. Und zwar haben wir im Geschäft eine ASP.NET Anwendung, in der es viele Formulare gibt. Einige davon sind kürzer, andere länger (zum Teil werden die Formulare auch generiert, was zu einer beinahe beliebigen Länge führen kann).

Das Problem ist, dass einer unserer Kunden die langen Formulare nicht abschicken kann. Es funktioniert einfach nicht! Bei den kürzeren Formularen hat er keine Probleme.

Das Phänomen tritt sowohl im IE als auch im FF auf. Betroffen sind mehrere Computer mit win2k und xp (auf anderen Computern des gleichen Kunden läuft die Sache rund).

Javascript ist aktiviert und auch sonst wurden (so wurde mir versichert) keine Veränderungen an den Standardeinstellungen vorgenommen. In einer älteren Version des gleichen Programms, das noch in classic asp umgesetzt ist, funktionierte alles tiptop. Einzelne Formulare, die jetzt nicht mehr gehen, sind 1 zu 1 übernommen worden (Einziger Unterschied in meinem Augen: Viewstate und Javascript Postbacks).

Meine Frage also: Hat jemand schon etwas ähnliches erlebt? Gibt es irgendwelche Einstellungen, die ein solches Fehlverhalten erklären würden? Gibt es irgendwelche Möglichkeiten das Fehlverhalten genauer zu analysieren?

Ich bin froh um jeden Tip - so etwas habe ich noch nie erlebt.

28.09.2007 - 09:29 Uhr

Bei TemplateFields ist das eigentliche Control meist(?) in einer Art Container versteckt (<div> drumrum... oder ein literal? irgendwas so). Auf jedem Fall musst du dann halt das verschachtelte Control aufrufen.

string s = ((Textbox)gvSelectedPerson.Rows[i].Cells[1].Controls[0].Controls[0]).Text;

evt. brauchst du auch nur ein .Controls[0], oder dein Control ist gar nicht auf der Position 0 (hast du noch weitere Controls im Templatefield?). Musst halt ein bisschen rumprobieren.

27.09.2007 - 12:21 Uhr

Das einzige, was dich AJAX kostet, ist die zusätzliche Zeit, die du zum entwicheln brauchst

24.09.2007 - 17:44 Uhr

Danke

Gibt es eigentlich noch eine Steigerung zum MVP? 🙂

24.09.2007 - 17:15 Uhr

Die ID wird im Querystring übergeben (btw. vom HttpModule aus der DB geholt).
Ich kann also die URL der Seite von jedem Control abrufen? Ohne, dass ich ihr das Pageobjekt übergebe?

Werd ich am Abend gleich mal ausprobieren.

23.09.2007 - 11:00 Uhr

Hallo

Ich hab da bei meinem Projektchen wieder mal eni Problem.

Und zwar suche ich nach einer Möglichkeit ein Usercontrol wissen zu lassen, auf welcher Seite es sich befindet. Dazu muss ich dem Usercontrol eine ID übergeben, welche die Seite repräsentiert.
Ich weiss, dass man der LoadControl Methode Parameter mitgeben kann, die dann an den Konstruktor übergeben werden. Allerdings möchte ich dieses Modul nicht dynamisch im Code laden, sondern zur Designzeit in die aspx Page einfügen.

Hintergrund: Das Usercontrol stellt mir ein Menu dar, mit dem ich durch die Seite navigiere. Nun soll das Menu aber, wenn eine Property richtig gesetzt ist, nur die Menupunkte "unterhalb" der aktiven Site anzeigen. Ich muss dem Control also klarmachen, wo es sich befindet.

Wie würded ihr vorgehen?