【问题标题】:Calling a C# class from my ASPX page从我的 ASPX 页面调用 C# 类
【发布时间】:2016-06-08 12:27:00
【问题描述】:

我有一个 ASPX 页面,它是处理设计和背后代码的 Web 表单。有人告诉我,我在此页面中拥有的所有类都需要分解为它们自己的文件。这些文件需要与类名同名。我的 ASPX 文件是 default.aspx,我的类是 GetMachineInfo.cs。如何在我的 ASPX 文件中调用该 cs 文件,这样我的类就好像在 ASPX 页面中一样。如果你需要,我会插入一些代码。我删掉了一些代码,以便专注于实际问题。如果缺少花括号或其他原因。只是想为这个特定问题提供必要的信息。干杯。

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();
        }

【问题讨论】:

    标签: c# asp.net linq class


    【解决方案1】:

    如果您的GetMachineInfo() 方法定义在与表单相同的命名空间(即 PVDA.Web)中,您应该能够按预期调用它,但是方法需要在类中定义,而不是直接在命名空间。

    因此,您可能需要考虑将它们标记为 static 以允许在不显式实例化您的类实例的情况下调用它们:

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

    这将允许您通过Machine.GetMachineInfo(...) 在整个应用程序中调用此方法,您可以在应用程序的任何页面中执行此操作:

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

    【讨论】:

    • 仍然收到一个错误,即 _defualt.Machine 不包含 GetMachineInfo 的定义与“DropDownList2.DataSource = Machine.GetMachineInfo(xDoc, 2); 并且在 GetMachineInfo 中找不到 XDocument 或任何变量......我认为它很简单,我只是忘了诚实地添加
    • 您需要确保将绑定代码放置在实际方法中(即dllBinding())。您可能还必须在外部定义中添加适当的 using 语句,以确保它可以访问所需的正确类。尝试右键单击 XDocument 类并检查 Visual Studio 中的“Resolve”选项,该选项应自动添加适当的 using 语句。您可能希望将您的 Machine 类包含在不同的文件中并引用它。
    • 事实上,我确实在另一个文件中有 GetMachineInfo,并试图在我的 ASPX 页面中引用它。会不会像'class Machine = new class();'工作?语法似乎不正确
    • 尝试使用我在上面的 Gist 中定义的 static 方法。它应该允许您按预期通过MachineMethods.GetMachineInfo() 引用该方法。您需要在该文件中有一个 using 语句指向定义 Machine 类的命名空间,以便该方法知道 Machine 对象是什么。此外,如果您需要创建单台机器的实例,您可以使用Machine machine = new Machine();
    【解决方案2】:

    为类创建一个单独的 .cs 文件。最好让文件名和类名相同。这将很容易跟踪,如果您想修改任何功能,您可以转到文件并进行修改。

    1. 为类创建一个单独的文件
    2. 删除aspx页面内的class def
    3. 在aspx页面中添加类命名空间
    4. 实例化类 前任。 class CLS = new class();

    【讨论】:

    • 是的,进行了代码审查,他们告诉我对我的课程进行此更改。这正是我想要做的。我应该把instatiation放在哪里。另外,当我尝试插入我的类名的代码 sn-p 时,我收到了一个错误。
    猜你喜欢
    • 2014-09-04
    • 2015-02-06
    • 1970-01-01
    • 2013-04-29
    • 2014-03-05
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多