我可以从另一个分类中调用一个分部类中定义的函数.可能吗?

Sha*_*pta 6 c# asp.net partial-classes

我为网页创建了两个部分类.

现在我已经给出了一个函数的定义,说我在调用OnSubmit事件按钮时调用submit().

但是这个函数没有被调用,程序没有编译,因为它无法搜索函数的定义,函数的定义是在另一个分类中定义的.是否可以调用此函数,或者我必须在im调用它的同一文件中给出函数的定义

例如

<%@ Page Language="C#" MasterPageFile="~/Master Pages/LeftMenu.master" AutoEventWireup="true" CodeFile="Registration.aspx.cs" Inherits="Web_Pages_Authentication_Login_Management_Registration" Title="Registration" StylesheetTheme="Default Theme 1"  %>
Run Code Online (Sandbox Code Playgroud)

Registration.aspx.cs

public partial class Web_Pages_Authentication_Login_Management_Registration : System.Web.UI.Page
{
    private string firstName;
    private string lastName;
    private string userName;
    private string userPassword;
    private string primaryEmail;
protected void btnSubmit_Click(object sender, EventArgs e)
    {
       Display();
    }
}
Run Code Online (Sandbox Code Playgroud)

Registration_Database.cs

   public partial class Web_Pages_Authentication_Login_Management_Registration 
    {
       const string dbFirstName = "@FirstName";
       const string dbLastName = "@LastName";
       const string dbUserName= "@UserName";
       const string dbUserPassword = "@UserPassword";
       const string dbPrimaryEmail = "@PrimaryEmail";  

       void Display()
          {
              firstName="XYZ"; //This variable is not accessible when i put both files in different directories
          }
    }
Run Code Online (Sandbox Code Playgroud)

我收到了以下错误

Error   1   'Web_Pages_Authentication_Login_Management_Registration' does not contain a definition for 'Display' and no extension method 'Display' accepting a first argument of type 'Web_Pages_Authentication_Login_Management_Registration' could be found (are you missing a using directive or an assembly reference?) C:\Documents and Settings\Administrator\Desktop\Online Test\Web Pages\Authentication\Login Management\Registration.aspx.cs  78  20  C:\...\Online Test\
Run Code Online (Sandbox Code Playgroud)

Registration.aspx,Registration.aspx.cs,Registration_Database.cs是三个不在App_Code文件夹中但只属于一个文件夹的文件,其中Registration.aspx.cs,Registration_Database.cs是部分类,Registration.aspx是我的设计文件.如果你想了解更多关于我的问题的信息,请告诉我

我没有使用DLL文件.没有预编译的代码

Tho*_*rin 5

我认为您遇到的问题是因为您的网站是动态编译的,而不是预编译的Web应用程序.

首次访问ASP.NET页面时,编译器将仅查看文件后面的代码,并且不会搜索所有其他.cs文件以获取同一类的可能额外代码.因此,它永远不会看到实现display(),这反过来导致文件后面的代码无法编译.

我肯定不会使用这样的方法来做你想要做的事情,但你可以定义一个派生自定义类,System.Web.UI.Page并让你的实际页面派生自新类.类定义必须App_Code用于动态编译的网站.

Registration.aspx.cs:

public partial class Web_Pages_Authentication_Login_Management_Registration : MyPage
{
    protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Display();
    }
}
Run Code Online (Sandbox Code Playgroud)

App_Code文件\ MyPage.cs:

public class MyPage : System.Web.UI.Page
{
    protected void Display()
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

在任何情况下:您当然不应该使用静态变量,如果多人同时使用您的网站,这将导致问题.坦率地说,你的榜样对我来说没什么意义.也许如果我们有关于您要完成的内容的更多信息,我们可以提供最佳实践方法.

请注意,在您的示例中,将第二个文件放在App_Code目录中将无法使其正常工作.这只会导致两个类具有完全相同的类名(当然命名空间匹配).它真的不喜欢那:)