Die temporäre Datei ohne Argumente Bezug auf Konstruktor enthält, wenn es nicht sollte

StackOverflow https://stackoverflow.com/questions/2373509

  •  24-09-2019
  •  | 
  •  

Frage

ich einige WebUserControls haben, die einen Parameter, um festzustellen, wie sie sich zu initialisieren. Allerdings, wenn ich die Seite Kompilieren erhalte ich die Fehler

'ControlName' does not contain a constructor that takes '0' arguments

Ich bin es nicht überall ohne ein Argument nennen, scheint es, dass eine Referenz in einer temporären Datei erzeugt wird. Ich habe eine andere Steuerung, die keine leere Konstruktor hat, und es ist nicht erforderlich man dort geschaffen werden, damit es nicht ein haben sollte.

Die tatsächliche Fehler sieht wie folgt aus:

  

Compiler-Fehlermeldung: CS1729:

     

‚Control‘ enthält keine   Konstruktor, '0' Argumente

nimmt      

Quellfehler:

     

Line 108: private static bool   @__initialized; Linie 109: Zeile   110:
  [System.Diagnostics.DebuggerNonUserCodeAttribute ()]   Zeile 111: public control_ascx ()   {Linie 112:
  ((Global :: ControlNamespace) (this)). AppRelativeVirtualPath   = "~ / ControlName.ascx";

     

Quelldatei:   (Path) Local \ Temp \ Temporary ASP.NET   Files \ root \ 1aca8e08 \ 3fab105e \ App_Web_controlname.ascx.cdcab7d2.tzm0xzkd.0.cs   Line: 110

Die Steuerung sieht wie folgt aus:

public partial class ControlName: System.Web.UI.UserControl
{
    public ControlName(IParameter parameter)
    {
        Method(parameter);
    }
}

EDIT: Basierend auf den Kommentaren unten es scheint, dass ich einen Verweis auf das Steuerelement in einer Designer-Datei ... irgendwo ... Alle Hinweise, dass ich mit einer Ausnahme im Code behinds befinden sie finden kann. Die Erklärung in der ASCX-Datei:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="ControlName.ascx.cs" Inherits="Control" %>

Ich dachte, dass dies die Ursache ist, aber bei näherer Betrachtung Ich habe andere Kontrollen, die eine ähnliche Erklärung haben und benötigen keinen Standardkonstruktor.

Wie kann ich den Speicherort, an dem die Steuerung von verwiesen wird?

Lösung:

Ich hatte Referenz-Tags

<%@ Reference Control="~/ControlName.ascx" %>

Überbleibsel aus früheren, dass offenbar als Designer Element zählen.

Die Antwort unten tatsächlich diese Informationen nicht enthalten, sondern ist eine gute Beschreibung dessen, was das Problem war.

War es hilfreich?

Lösung

Ich bin kein Experte auf Web-Entwicklung, aber es sieht aus wie Sie eine Instanz der auf einem Web-Formular-Designer platziert Kontrolle haben, und dass Designer-Code generiert, der einen parameterlosen Konstruktor erwartet.

Wenn dies der Fall ist, dann dieses Problem zu lösen, sollten Sie entweder das Steuerelement aus der Form entfernen oder einen parameterlosen Konstruktor hinzuzufügen.

Andere Tipps

Die CLR versucht, das Standard-Konstruktor der Superklasse Ihrer Klasse zu nennen, aber es kann nicht. Setzen Sie einen expliziten Aufruf an einen geeigneten Basiskonstruktor.

Wenn Sie Ctor ohne Parameter haben versucht, es Eltern Klasse ctor ohne Parameter aufzurufen. aber es der Basisklasse nicht eine hat.

Ich weiß nicht, ob dies der Fall für Sie. Ich habe in der Vergangenheit, dass Compiler-Fehler erhalten, wenn sie mit Objektserialisierung arbeiten. Wenn ich mich richtig erinnere, als wir ausschließlich XML-Serialisierung verwenden, würden wir diesen Fehler. Wenn das Objekt deserialisiert, war die Laufzeit des Standard-Konstruktor, also wenn es keine hat, es durch den Compiler gekennzeichnet wurde.

Auf der Basis Ihrer bearbeiten, ich denke, das eigentlich wegen des Namens sein können Sie wählten ... Control. Es gibt viele Control Klassen, und es könnte sein, dass die declare in der ascx ist mit Problemen mit einem Namespace-Konflikt. Versuchen Sie das Umbenennen Ihrer Kontrolle auf etwas anderes.

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