SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Kein Zugriff auf Steuerelente

Unbeantwortet Dieser Beitrag hat 17 Antworten

Ohne Rang
30 Beiträge
maltek erstellt 22 März 2010 14:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Moin Moin,

Ich beschäftige mich seit einigen Tagen mit der Entwicklung von MOSS (2007) Anwendungen.
Ich bin nun dabei eine eigende Applikationseite zu entwickeln, das ganze hab ich mit einer "normalen" .aspx Seite bereits realisiert. Jetzt möchte ich das ganze noch einmal mit Code-Behind versuchen.

Erstmal zur Verständnis:
- Ich erstelle unter VisualStudio(2008) eine neue Website.
- Ich füge eine Verweis zur SharePoint.dll hinzu.
- Die Code-Behind Klasse muss von LayoutPageBase abgeleitet werden.
- Als Masterseite wird application.master festgelegt.

Soweit ist das doch alles richtig oder?

 

Nun zu meinem Problem:

Ich kann aus meiner Code-Behind Klasse nicht auf die Steuerelemente zugreifen, die Objekte werden nicht gefunden.
Hat jemand einen Hinweis woran das liegen kann?

using ...
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace WebApplication1
{
    public partial class Class1 : LayoutsPageBase
    {
        protected override void OnLoad(EventArgs e)
        {

        }
    }
}

 

<%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Class1.aspx.cs" MasterPageFile="../../application.master" Inherits="Class1"%>

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
          <asp:Label ID="lblLists" runat="server"></asp:Label>
</asp:Content>

 

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 22 März 2010 15:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wie immer bei ASP.NET: die Steuerelemente müssen in der CodeBehind-Klasse mit derselben ID und protected deklariert werden:

protected Label lblLists;

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
30 Beiträge
maltek Als Antwort am 23 März 2010 07:33
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok, das hab ich jetzt gemacht.

Nun bekomme ich folgende Fehlermeldung:


Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.   bei _Default.OnLoad(EventArgs e)
   bei System.Web.UI.Control.LoadRecursive()
   bei System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)







public partial class _Default : LayoutsPageBase
{
    protected Label lblAnzahL;


    protected override void OnLoad(EventArgs e)
    {
        lblAnzahL.Text = "hello world";
    }
}

Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 23 März 2010 08:31
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Normalerweise sollte das nicht notwendig sein, denn wenn du im Markup ein Steuerelement hinzufügst, dann wird die Deklaration in der Partial-Class in Class1.aspx.designer.cs automatisch erstellt.

Henning Eiben
busitec.de

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 23 März 2010 09:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Aber nur dann, wenn es die designer.cs auch gibt, was ja durchaus nicht immer der Fall ist.

Ansonsten gilt, daß der Name und Typ des Controls exakt der im Markup angegebenen ID entsprechen muß.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 23 März 2010 09:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Aber wann hat man denn keine designer.cs? Dann hast du die ASPX-Seite nicht über Visual Studio der Solution hinzugefügt ...

Henning Eiben
busitec.de

Ohne Rang
30 Beiträge
maltek Als Antwort am 23 März 2010 09:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ok, habs jetzt hinbekommen.

IntelliSense zeigt mir zwar die Steuerelemente nicht an, der Compiler melder auch wie wild Fehler, letztendlich läuft der Code auf der Seite aber doch.

Damit lässt sich sicherlich ersteinmal arbeiten, wenn jemand eine Idee hat, wie ich das Problem mit der/die/das IntelliSensebeseitigt bekomme wäre das super.

 

Bis dahin schonmal vielen Dank.

Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 23 März 2010 09:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wie war das noch gleich - du hattest ein Web-Projekt in Visual Studio angelegt richtig? Hast du eine designer.cs Datei für deine ASPX-Seite? Wenn ja, dann kannst du die einfach einmal aus dem Projekt löschen (ist kein Prob, weil die eh generiert wird). Anschließend kannst du im Kontext-Menu der ASPX-Seite "In Web-Anwendung umwandel" (oder so ähnlich) auswählen. Dadurch wird eine neue designer.cs erstellt, die dann auch alle Controls beinhaltet. Damit sollte das IntelliSense wieder funktionieren und es sollten beim Kompilieren auch keine Fehler mehr kommen.

Henning Eiben
busitec.de

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 23 März 2010 09:57
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wenn man für SharePoint entwickelt, hat man als Projekttyp oft eine einfache Klassenbibliothek und muß trotzdem eine aspx hinzufügen. Das geht zwar problemlos, aber es wird dabei keine designer.cs erzeugt, d.h. man muß sich um solche Dinge selbst kümmern.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 23 März 2010 10:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

OK, das ist dann natürlich richtig.

Allerdings würde ich in solchen Fällen immer ein Web-Anwendungs-Projekt machen ... :) alleine schon wegen dem Visual-Designer.

Henning Eiben
busitec.de

Ohne Rang
30 Beiträge
maltek Als Antwort am 23 März 2010 11:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also eine designer.cs habe ich nicht. Das heißt also ich habe eine Website richtig?

Wenn ich das jetzt richtig verstanden habe, habe ich zwei Möglichkeiten:
- Selber eine designer.cs anlegen.
- Die Website in eine Webanwendung konvertieren.

Dann werden ich wohl erstmal versuchen die designer.cs nachträglich zu erstellen.
Wo liegt eigentlich der Unterscheid zwischen einer Webanwendung und einer Website?

Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 23 März 2010 13:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nein - also, wenn du eine ASPX-Seite zu einem Projekt hinzufügst und du keine designer.cs Datei bekommst, dann hast du weder eine Website noch eine Webanwendung. In beiden Projekten werden bei ASPX-Seiten die Designer-Dateien automatisch erstellt.

Bei allen anderen Projekten werden keine designer Dateien erstellt. Dann musst du die Member für die Steuerelemente "von Hand" erstellen. Das muss nicht zwangsläufig in einer "desginer.cs" Datei sein.

Das Konvertieren in die Webanwendung erfolgt nicht auf Projekt-Ebene (!), sondern die Datei wird in eine Webanwendung konvertiert (hat mich am Anfang auch verwirrt, geht aber!). Das bedeutet im Wesentlichen, dass eine designer Datei für die jeweilige ASPX-Seite erstellt wird.

Puh, inwieweit unterscheiden sich denn Webanwendung und Website? Also: eine Website wird typischerweise komplette wie sie ist (inkl. Quellcode) ausgeliefert (ja, das kann man auch pre-compilen!). Das ist gut für kleine ad-hoc Projekte. Webanwendungen hingegen werden immer kompiliert ausgeliefert und sind somit kompakter ... für mehr unterschiede gibt's unter http://msdn.microsoft.com/en-us/library/aa730880%28VS.80%29.aspx#wapp_topic5 eine Übersicht.

Henning Eiben
busitec.de

Ohne Rang
30 Beiträge
maltek Als Antwort am 23 März 2010 14:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wenn ich die Steuerelemente direkt in der Klasse deklariere, bekomme ich die Fehlermeldung:
..."Der Typ Class1 enthält bereits eine deklaration für lblLists"...

In der Class1.cs hab ich jetzt stehen:

protected Label lblLists;

 

und in der aspx:

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
          <asp:Label ID="lblLists" runat="server"></asp:Label>
</asp:Content>

 

Weitere Dateien in denen etwas deklariert sein könnte sind nicht vorhanden.
Langsam geht es in Richtung Verzweiflung.

Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 23 März 2010 14:13
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hmm - meinst du, du könntest mir deine Lösung einmal per Mail zusenden an eiben at busitec.de? Dann kann ich mir deinen Code vielleicht einmal "komplett" ansehen und dir vielleicht helfen.

Henning Eiben
busitec.de

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 23 März 2010 15:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Steht da oben eventuell partial class Class1? Dann gibt es nämlich doch eine designer.cs, aber die ist auf den ersten Blick in Visual Studio nicht zu sehen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
30 Beiträge
maltek Als Antwort am 24 März 2010 11:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Jepp, da steht wirklich partial, wenn ich es ohne partial ausführe kommt die meldung:

"error CS0260: Ein partial-Modifizierer in der Deklaration des Typs "Class1" fehlt. Es ist eine andere partielle Deklaration dieses Typs vorhanden.   bei System.Web.Compilation.AssemblyBuilder.Compile() "

Eine weitere Datei existiert aber definitv nicht, zumindest nicht im Projektordner.

 

Ohne Rang
643 Beiträge
Henning Eiben Als Antwort am 24 März 2010 12:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hmm, kann sein, dass diese Dateien von Haus aus ausgeblendet sind? ... ach, oder ist das ein Website-Projekt? Sind da die designer-Dateien nicht an einer anderen Stelle abgelegt (App_Code?) - oder werden die womöglich erst zur Laufzeit durch den JIT-Compiler erzeugt?

Sieht so aus, als ob ich schon ewig kein Website-Projekt mehr erstellt habe :)

Henning Eiben
busitec.de

Ohne Rang
30 Beiträge
maltek Als Antwort am 25 März 2010 09:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es gibt einen Ordner App-Data, dieser sit aber leer.

Ich versuch das ganze jetzt nochmal mit einem Webanwendung, so geht´s ja nicht weiter...