【问题标题】:Instantiate partial class : page types in ASP.NET C#实例化部分类:ASP.NET C# 中的页面类型
【发布时间】:2012-12-23 19:38:30
【问题描述】:

下面是我试图通过实例化部分类以从单个 .aspx 页面中使用多个类(及其方法)的示例。

login.aspx:

<%@ Page Language="C#" Codefile="Web_Code/LogonService.cs" Inherits="Client.LogonService" %>
<!-- html here, also will be calling methods here via a form -->


Web_Code/SessionHandler.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Client {

    public partial class SessionHandler : Page {

        //Constructor method here

        public string setSessionUser(string username) {
            return "this works, this is just a test";
        }

    }   
}


Web_Code/LoginService.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Client {

    public partial class LoginService : Page {

        public void checkCredentials(object sender, EventArgs e) {

            //Check credentials here

            //If credentials are good, add the username to session

            /* PROBLEM HERE: VS CAN'T FIND TYPE NOR INSTANTIATE*/
            SessionHandler ses = new SessionHandler();
            ses.setSessionUser(username.Value);  

        }
    }
}   

问题在 Web_Code/LogonService.cs 中有注释 - 它无法实例化 SessionHandler。 - 这是为什么?

我正在从 PHP 切换到 C#,在 PHP 世界中,我会简单地输入 "require("Web_Code/SessionHandler.php");"就这样结束了,但 C# 的方式似乎更复杂一些。

感谢您的任何意见!

【问题讨论】:

  • 我遗漏了一些东西。一个问题。你在这里问什么?
  • 您好,我编辑了 OP 以引用问题在我的代码中的位置。如果您查看我试图实例化 SessionHandler 的 Web_Code/LogonService.cs,它不会,我的问题是如何解决这个问题。谢谢。

标签: c# partial-classes


【解决方案1】:

您正在尝试以 PHP 方式使用 .NET,最终这会给您带来问题。在 ASP.NET 中,您不(也可能不应该)从 Page 类继承每个类。这通常仅用于您正在实现的特定网页的代码隐藏。在 WebForms 中,您还可以使用 Controls,如 LabelRepeater 等,而不是调用页面方法。此外,您已经可以访问页面中的 Session 对象和 User 对象,并且通常不需要添加自己的会话处理。

鉴于您刚刚开始,您可能希望了解 ASP.NET MVC。对于网络编程来说,这是一个更好的范例。

【讨论】:

  • 感谢您的回答。你会建议我每页只使用一个部分类吗?因此,如果我有一个“user-dashboard.aspx”页面,代码文件将是一个名为“UserActions”之类的部分类,它将处理该仪表板页面上的所有内容,如果我在仪表板页面上有一个注销按钮,我可以它作为“logoff.aspx”的链接,它将代码文件作为一个名为“SessionHandler”的部分类来破坏会话?这是一种更好的思考方式吗?
  • 是也不是,通常你有一个部分类支持每个页面。该类包含页面的“代码隐藏”——通常处理任何业务逻辑、数据访问等。ASPX 文件中的任何代码通常仅用于呈现 HTML。因此,您的logoff.aspx 将有一个继承自Page 的部分logoff 类。然后,在您的 Page_Load 方法中,您将使用 Session 属性以及可能的 FormsAuthentication 静态类来实际注销并放弃会话。
  • @Matthew2468 - 说真的,跳过 WebForms 并改用 MVC。 MVC 确实是 ASP.NET 的未来,如果您刚开始使用 MVC,您将不必忘记在 WebForms 中养成的任何坏习惯。
  • 感谢您提供的所有信息,我现在对如何构建我的项目有了更好的想法。另外,我将研究 MVC。谢谢你的建议。
猜你喜欢
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多