Artikel-ID: 911721 - Geändert am: Montag, 13. März 2006 - Version: 1.1

Sie können möglicherweise nicht auf die öffentliche Eigenschaft zur Laufzeit zugreifen und Sie erhalten eine Fehlermeldung in einer ASP.NET 2.0-basierte Anwendung

SystemtippDieser Artikel bezieht sich auf ein anderes Betriebssystem als das von Ihnen verwendete. Für Sie möglicherweise nicht relevante Artikelinhalte wurden deaktiviert.

Auf dieser Seite

Alles erweitern | Alles schließen

Problembeschreibung

Stellen Sie sich das folgende Szenario vor. In einer Microsoft ASP.NET 2.0-basierten Anwendung enthält eine Webseite ein Microsoft Windows Forms-Steuerelement Benutzerobjekt. Sie verwenden JavaScript, um die Eigenschaften der dieses Windows Forms-Steuerelement Benutzerobjekt zugreifen. In diesem Szenario möglicherweise nicht auf die öffentliche Eigenschaft zur Laufzeit zugreifen werden. Außerdem wird möglicherweise die folgende Ausnahme Fehlermeldung angezeigt:
Finden Sie am Ende dieser Meldung anstatt in diesem Dialogfeld ausführliche Informationen zum Aufrufen von Just-in-Time (JIT) Debuggen.
**************-Ausnahme Text **************
System.Security.SecurityException: Anforderung für die Berechtigung des Typs ' System.Security.Permissions.SecurityPermission Mscorlib, Version = 2.0.0.0, Culture = Neutral, PublicKeyToken = b77a5c561934e089 ' ist fehlgeschlagen. at System.Windows.Forms.SafeNativeMethods.IFont.GetHFont() at System.Windows.Forms.Control.ActiveXImpl.get_AmbientFont() at System.Windows.Forms.Control.get_Font() at System.Windows.Forms.Control.GetParentFont() at System.Windows.Forms.Control.get_Font() at System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.CommonLayout() at System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintWorker(PaintEventArgs e, Boolean up, CheckState state) at System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintUp(PaintEventArgs e, CheckState state) at System.Windows.Forms.ButtonInternal.ButtonStandardAdapter.PaintOver(PaintEventArgs e, CheckState state) at System.Windows.Forms.ButtonInternal.ButtonBaseAdapter.Paint(PaintEventArgs pevent) at System.Windows.Forms.ButtonBase.OnPaint(PaintEventArgs pevent) at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) at System.Windows.Forms.Control.WmPaint(Message& m) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
Aktion, die Fehler war:
Bedarf
Der Typ der ersten Berechtigung, die fehlgeschlagen: System.Security.Permissions.SecurityPermission
Assemblys geladen werden ************** **************
mscorlib
Assemblyversion: 2.0.0.0
Win32-Version: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50215/mscorlib.dll
----------------------------------------
System
Assemblyversion: 2.0.0.0
Win32-Version: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
SmartClient
Assemblyversion: 1.0.1928.26893
Win32-Version: nicht zutreffend
CodeBase: http://localhost:1156/SmartClientTestWeb/SmartClient.dll
----------------------------------------
System.Windows.Forms
Assemblyversion: 2.0.0.0
Win32-Version: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assemblyversion: 2.0.0.0
Win32-Version: 2.0.50215.44 (beta2.050215 4400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Microsoft.Mshtml
Assemblyversion: 7.0.3300.0
Win32-Version: 7.0.3300.0
CodeBase: file:///C:/WINDOWS/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll
----------------------------------------
************** JIT-Debuggen **************
Zum Aktivieren von Just-in-Time (JIT) Debuggen muss die .config-Datei für diese Anwendung oder den Computer (machine.config) den JitDebugging-Wert im Abschnitt system.windows.forms festgelegt aufweisen. Die Anwendung muss auch mit aktiviertem Debuggen kompiliert werden.
Beispiel:
<configuration> < system.windows.forms JitDebugging = "true" / > </configuration>
Wenn JIT-Debuggen aktiviert ist, alle nicht behandelten Ausnahmen wird weiterverbunden mit JIT-Debugger auf dem Computer registriert statt durch dieses Dialogfelds behandelt werden.
Hinweis: Dieses Problem tritt in Microsoft .NET Framework 1.1.

Ursache

Dieses Problem, da die Basisklasse UserControl das folgende Attribut enthält.
ComVisible(false)

Abhilfe

Fügen Sie die folgenden Attribute hinzu, um dieses Problem zu umgehen, der UserControl -Klasse.
ComVisible(true)

Weitere Informationen

Schritte zum Reproduzieren des Problems

  1. Starten Sie Microsoft Visual Studio 2005.
  2. Klicken Sie im Menü Datei auf neue Website .
  3. Klicken Sie in der Liste Vorlagen auf ASP.NET-Website .
  4. Geben Sie DriveLetter:\Path\KB911721, im Feld Speicherort .
  5. Klicken Sie in der Liste auf Visual c# , und klicken Sie dann auf OK .
  6. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf default.aspx und klicken Sie dann auf Öffnen .
  7. Ersetzen Sie den dort vorhandenen Code durch den folgenden Code.
    <%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Untitled Page</title>
        <script language=javascript>
            function TestData()
            {
                alert('Test1');
                form1.TestControl.TestProperty = "gomusin";
                alert(form1.TestControl.TestProperty);
            }
            
            function TestData1()
            {
                alert('Test2');
                var sData = form1.TestControl.TestProperty;
                alert(sData);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <object id="TestControl" classid="SmartClient.dll#SmartClient.UserControl1" VIEWASTEXT>
            </object>
            <input id="Button2" type="button" value="Property Read" style="width: 165px" onclick="javascript:TestData1()" />
            <input id="Button1" type="button" value="Property Write" style="width: 168px" onclick="javascript:TestData()"/>
    </div>
        </form>
    </body>
    </html>
  8. Im Menü Datei klicken Sie auf Hinzufügen, und klicken Sie auf Neues Projekt .
  9. Klicken Sie in der Liste Vorlagen auf Windows Control Library .
  10. Geben Sie im Feld Name SmartClient.
  11. Geben Sie in das Feld Ort DriveLetter:\Path und klicken Sie dann auf OK .
  12. Ersetzen Sie im Designer Code für die Datei UserControl1.Designer.cs den vorhandenen Code durch folgenden Code.
    namespace SmartClient
    {
        partial class UserControl1
        {
            /// <summary>
            /// Required designer variable.
            /// </summary>
            private System.ComponentModel.IContainer components = null;
    
            /// <summary>
            /// Clean up any resources being used.
            /// </summary>
            /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }
    
            #region Component Designer generated code
    
            /// <summary>
            /// Required method for designer support - do not modify 
            /// the contents of this method with the code editor.
            /// </summary>
            private void InitializeComponent()
            {
                this.button1 = new System.Windows.Forms.Button();
                this.button2 = new System.Windows.Forms.Button();
                this.textBox1 = new System.Windows.Forms.TextBox();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.Location = new System.Drawing.Point(7, 90);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(126, 23);
                this.button1.TabIndex = 0;
                this.button1.Text = "property Read";
                this.button1.Click += new System.EventHandler(button1_Click);
                // 
                // button2
                // 
                this.button2.Location = new System.Drawing.Point(146, 90);
                this.button2.Name = "button2";
                this.button2.Size = new System.Drawing.Size(127, 23);
                this.button2.TabIndex = 1;
                this.button2.Text = "property Write";
                this.button2.Click += new System.EventHandler(button2_Click);
                // 
                // textBox1
                // 
                this.textBox1.Location = new System.Drawing.Point(22, 25);
                this.textBox1.Name = "textBox1";
                this.textBox1.Size = new System.Drawing.Size(232, 21);
                this.textBox1.TabIndex = 2;
                // 
                // UserControl1
                // 
                this.Controls.Add(this.textBox1);
                this.Controls.Add(this.button2);
                this.Controls.Add(this.button1);
                this.Name = "UserControl1";
                this.Size = new System.Drawing.Size(276, 123);
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
    
            #endregion
    
            private System.Windows.Forms.Button button1;
            private System.Windows.Forms.Button button2;
            private System.Windows.Forms.TextBox textBox1;
        }
    }
  13. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf UserControl1.cs und klicken Sie dann auf Code anzeigen .
  14. Ersetzen Sie den vorhandenen Anwendungscode, mit dem folgenden Code.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Text;
    using System.Windows.Forms;
    
    namespace SmartClient
    {
      public partial class UserControl1 : UserControl
      {
        public UserControl1()
        {
          InitializeComponent();
        }
    
        String TestProperty = "something";
    
        void button2_Click(object sender, System.EventArgs e)
        {
          textBox1.Text = TestProperty;
        }
    
        void button1_Click(object sender, System.EventArgs e)
        {
          TestProperty = textBox1.Text;
        }
      }
    }
  15. Klicken Sie im Debuggen auf Debuggen starten .

    Hinweis: Wenn Sie eine beliebige Schaltfläche klicken, sehen Sie das Problem, das im Abschnitt "Problembeschreibung" genannt wird.
Die in diesem Artikel erwähnten Fremdanbieterprodukte werden von einem Lieferanten hergestellt, der von Microsoft unabhängig ist. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.

Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ASP.NET 2.0
Keywords: 
kbmt kbtshoot kbprb KB911721 KbMtde
Maschinell übersetzter ArtikelMaschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 911721  (http://support.microsoft.com/kb/911721/en-us/ )
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
Retired KB ArticleDisclaimer zu nicht mehr gepflegten KB-Inhalten
Dieser Artikel wurde für Produkte verfasst, für die Microsoft keinen Support mehr anbietet. Der Artikel wird deshalb in der vorliegenden Form bereitgestellt und nicht mehr weiter aktualisiert.