2016-06-08 6 views
1

Ich habe eine ASPX-Seite, die das Webformular ist, das das Design und den Code behandelt. Mir wurde gesagt, dass alle Klassen, die ich auf dieser Seite habe, in ihre eigenen Dateien aufgeteilt werden müssen. Diese Dateien müssen denselben Namen wie der Klassenname haben. Meine ASPX-Datei ist default.aspx und meine Klasse ist GetMachineInfo.cs. Wie rufe ich diese CS-Datei in meiner ASPX-Datei auf, so dass es wie meine Klasse innerhalb der ASPX-Seite ist. Ich werde etwas Code einfügen, wenn Sie es brauchen. Ich habe Code ausgeschnitten, um mich auf das eigentliche Problem zu konzentrieren. Wenn eine geschweifte Klammer fehlt oder etwas fehlt, ist das der Grund. Ich wollte nur die notwendigen Informationen für dieses spezielle Problem geben. Prost.Aufruf einer C# -Klasse von meiner ASPX-Seite

namespace PVDA.Web 
 
{ 
 
    /* 
 
    * LINQ Queries for binding 
 
    * This is calling the wrong information 
 
    * It's calling the n attribute of "srn", not the mach "n" 
 
    * This is going a layer too deep. needs to be mach no srn 
 
    */ 
 

 
    public class Machine 
 
    { 
 

 
     // Getting all the objects to the machine 
 
     public int snsrN { get; set; } 
 
     public string calctype { get; set; } 
 
     public string sensName { get; set; } 
 

 

 
     public static List<Machine> GetMachineInfo(XDocument xDoc, int machineNumber) 
 
     { 
 

 
      return xDoc.XPathSelectElements("./mmsdata/mill/mach") 
 
           .Where(x => x.Attribute("n").Value == machineNumber.ToString()) 
 
           .Elements() 
 
           .Select(x => new Machine 
 
           { 
 
            sensName = x.Value, 
 
            snsrN = Convert.ToInt32(x.Attribute("n").Value), 
 
            calctype = x.Attribute("calctype").Value 
 
           }).ToList(); 
 

 
     } 
 
    } 
 
}
namespace PVDA.Web 
 
{ 
 
    public partial class _default : System.Web.UI.Page 
 
    { 
 
     protected void Page_Load(object sender, EventArgs e) 
 
     { 
 
      if (!IsPostBack) 
 
      { 
 
       // Calling 
 
       ddlBinding(); 
 
       NewQuery(); 
 
      } 
 

 
      
 
      
 
     } 
 

 
    public void ddlBinding() 
 
     { 
 
      // Getting the XML file imported in 
 
      const string FILE_PATH = @"MillData.xml"; 
 
      // Set the file path 
 
      XDocument xDoc = XDocument.Load(Server.MapPath(FILE_PATH)); 
 

 

 
      Machine machine = new Machine(); 
 

 

 
      // Setting a variable to bind the data into the dropdownlists 
 
      var dropDownDataList1 = GetMillInfo(xDoc, "n"); 
 
      var dropDownDataList2 = machine.GetMachineInfo(xDoc, 2); 
 

 
// Bind Machines to DropDownList2 
 
      DropDownList2.DataSource = machine.GetMachineInfo(xDoc, 2); 
 
      // Set text/value properties 
 
      DropDownList2.DataTextField = "snsrN"; 
 
      DropDownList2.DataValueField = "sensName"; 
 
      // Bind the contents to be reflected in the UI 
 
      DropDownList2.DataBind(); 
 
     }

Antwort

4

Wenn Ihre GetMachineInfo() Methode im gleichen Namensraum wie Ihre Form definiert ist (dh PVDA.Web), sollten Sie in der Lage sein, es zu nennen, wie erwartet, sind jedoch Methoden erforderlich definiert werden innerhalb einer Klasse und nicht direkt unter einem Namespace.

Als Ergebnis Sie betrachten wünschen können sie als static markiert sie, ohne explizit instanziieren eine Instanz der Klasse aufgerufen werden, ermöglichen:

public class Machine 
{ 
    public static List<Machine> GetMachineInfo(XDocument xDoc, int machineNumber) 
    { 
     // Omitted for brevity 
    } 
} 

Dies würde ermöglichen es Ihnen, diese Methode in Ihrer Anwendung aufgerufen werden durch Machine.GetMachineInfo(...), die Sie innerhalb einer der Seiten in der Anwendung tun könnte:

// Within your ddlBinding() method 
DropDownList2.DataSource = Machine.GetMachineInfo(xDoc, 2); 
+0

noch einen Fehler bekommen, dass _defualt.Machine (2 xDoc) enthält keine Definition für GetMachineInfo mit „DropDownList2.DataSource = Machine.GetMachineInfo enthalten, und auch seine nicht XDocument in GetMachineInfo, oder eine der Variablen zu finden, ... Ich denke, es ist etwas einfaches, das ich gerade vergessen habe, ehrlich hinzuzufügen –

+0

Sie müssen sicherstellen, dass Sie Ihren Bindungscode innerhalb einer tatsächlichen Methode platzieren (dh 'dllBinding()'). Sie müssen möglicherweise auch die entsprechenden using-Anweisungen hinzufügen Wenn Sie mit der rechten Maustaste auf die XDocument-Klasse klicken und in Visual Studio nach einer Option "Resolve" suchen, die automatisch die entsprechende using-Anweisung hinzufügen soll, sollten Sie dies tun Schließen Sie Ihre 'Machine'-Klasse in eine andere Datei ein und verweisen Sie darauf es auch. –

+0

Sie können [einen Gist hier sehen, wie diese getrennten Dateien aussehen könnten] (https://gist.github.com/Rionmonster/708305a93bc6060b0c99efa7fb0494af). –

0

für die Klasse eine separate CS-Datei erstellen. Es ist die beste Vorgehensweise, wenn Dateiname und Klassenname identisch sind. Es wird einfach zu verfolgen sein und wenn Sie irgendeine Funktionalität ändern möchten, können Sie einfach die Datei öffnen und ändern.

  1. eine separate Datei für Klasse
  2. Entfernen Sie die Klasse def in der aspx Seite
  3. Fügen Sie die Klasse-Namespace in aspx Seite
  4. Instanziieren der Klasse Ex erstellen. class CLS = new class();
+0

Ja, ging in einen Code-Review und sie sagten mir, dass ich diese Änderung in meinem Unterricht machen soll. Genau das möchte ich tun. Wo sollte ich die Installation platzieren? Und wenn ich diesen Codeschnipsel mit meinem eingefügten Klassennamen ausprobiere, erhalte ich einen Fehler. –

Verwandte Themen